Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Debugging & Profiling
Search
Florian
June 04, 2014
Education
1
49
Debugging & Profiling
My talk on debugging & profiling techniques for mobile testing days 2014 (german)
Florian
June 04, 2014
Tweet
Share
More Decks by Florian
See All by Florian
[iOS] dependency management
florianbuerger
0
76
Swift 2 in Production
florianbuerger
0
70
Dem Fehler auf der Spur - Mobile Testing Days 2015
florianbuerger
0
74
WatchKit overview
florianbuerger
0
150
Swift Intro
florianbuerger
1
200
AppCode versus Xcode
florianbuerger
0
430
Other Decks in Education
See All in Education
HTML5 and the Open Web Platform - Lecture 3 - Web Technologies (1019888BNR)
signer
PRO
2
3.1k
Introduction - Lecture 1 - Web Technologies (1019888BNR)
signer
PRO
0
5.8k
20251119 如果是勇者欣美爾的話, 他會怎麼做? 東海資工
pichuang
0
140
NUTMEG紹介スライド
mugiiicha
0
310
The Next Big Step Toward Nuclear Disarmament
hide2kano
0
160
沖ハック~のみぞうさんとハッキングチャレンジ☆~
nomizone
1
520
今の私を形作る4つの要素と偶然の出会い(セレンディピティ)
mamohacy
2
130
吉岡研究室紹介(2025年度)
kentaroy47
0
770
Semantic Web and Web 3.0 - Lecture 9 - Web Technologies (1019888BNR)
signer
PRO
2
3.1k
生成AIとの付き合い方 / Generative AI and us
kaityo256
PRO
11
6.6k
核軍備撤廃に向けた次の大きな一歩─核兵器を先には使わないと核保有国が約束すること
hide2kano
0
180
【ZEPホスト用メタバース校舎操作ガイド】
ainischool
0
150
Featured
See All Featured
Done Done
chrislema
186
16k
Documentation Writing (for coders)
carmenintech
76
5.2k
The Language of Interfaces
destraynor
162
25k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
How to Ace a Technical Interview
jacobian
280
24k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Optimizing for Happiness
mojombo
379
70k
BBQ
matthewcrist
89
9.9k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
RailsConf 2023
tenderlove
30
1.3k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.2k
Transcript
@florianbuerger
None
Debugging Tools Profiling
Debugging
Exception Type: SIGSEGV Exception Codes: SEGV_ACCERR at 0x24 Crashed Thread:
14 (...) Thread 14 Crashed: 0 AGXGLDriver 0x2f24e37e agxuReloadCtxVertexConstants(GLDContextRec*, void*) + 2 1 GLEngine 0x326a4a37 gleDoDrawDispatchCoreES2 + 592 2 GLEngine 0x3268440b glDrawElements_IMM_ES2Exec + 184 3 QuartzCore 0x32916595 CA::OGL::GLContext::draw_elements(CA::OGL:: 4 QuartzCore 0x32916437 CA::OGL::Context::array_flush() + 88 5 QuartzCore 0x329162ab CA::OGL::Context::ClippedArray::next_rect(CA::Bounds&) + 220 6 QuartzCore 0x329449c7 CA::OGL::emit_quad_indices(CA::OGL::Context&, CA::OGL::RectState const&, 7 QuartzCore 0x32944845 CA::OGL::emit_mesh_with_center(CA::OGL::Context&, CA::OGL::RectState const&, 8 QuartzCore 0x3294d6ed CA::OGL::emit_n_part_rect(CA::OGL::Context&, CA::OGL::RectState const&, int, 9 QuartzCore 0x3294aff1 CA::OGL::emit_shadow_path(CA::OGL::Context&, double, CA::Vec2<float> const&, 10 QuartzCore 0x32928ae1 CA::CG::DrawPathShadow::draw_shadow(CA::CG::Renderer&, bool) const + 278 11 QuartzCore 0x32913b05 CA::CG::DrawOp::render(CA::CG::Renderer&) const + 738 12 QuartzCore 0x32912791 CA::CG::Queue::render_callback(void*) + 250 13 libdispatch.dylib 0x3b07ee7b _dispatch_queue_drain + 372 14 libdispatch.dylib 0x3b07bf93 _dispatch_queue_invoke + 40 15 libdispatch.dylib 0x3b07f745 _dispatch_root_queue_drain + 74 16 libdispatch.dylib 0x3b07f9c5 _dispatch_worker_thread2 + 54 17 libsystem_pthread.dylib 0x3b1a9dff _pthread_wqthread + 298 18 libsystem_pthread.dylib 0x3b1a9cc4 start_wqthread + 8
Panik&Ruhig&atmen
Mentales(Modell(=>(
Debugging(is(twice(as(hard(as( wri1ng(the(code(in(the(first(place.( Therefore,(if(you(write(the(code(as( cleverly(as(possible,(you(are,(by( defini1on,(not(smart(enough(to( debug(it.( —"Brian"Kernighan
100%$Verständnis
Tools
Xcode&Debugger
Alle$Breakpoints$ de0/ak2vieren Standort simulieren Programm0 ausführung$ kontrollieren
Demo
Watch&on&Vimeo h"ps:/ /vimeo.com/97512083
Target'Schemes
Launch'Arguments
-NSShowNonLocalizedStrings YES -NSDoubleLocalizedStrings YES -AppleLanguages (German)
None
LLDB$Debugger
(…) po expr (…)
po (NSString *)[self title]!→""Foo"
expr [self setTitle:@"Bar"]!→""Bar"
Aliase command alias spark \ p (void*)dlopen("(...)/SparkInspector.dylib")
chisel
Danke&Facebook 1. Sammlung*von*LLDB*Kommandos 2. presponder*=>*Ausgabe*der*Responder*Chain 3. (...) 4. brew install
chisel
Demo
Watch&on&Vimeo h"ps:/ /vimeo.com/97512085
Wissen&weitergeben ~/.lldbinit !!dynamic!Library!für!iOS!! http://defagos.roon.io/sharing-lldb-debugging- helpers-between-projects-using-a-dynamic-library
Logging
Logging&!=&NSLog
Logging&via&Breakpoints
Logging&via&Breakpoints kein%Neu(Kompilieren De#/Ak'vierung.mit.einem.Klick Logs%in%Release%builds
CocoaLumberjack
Schnell Mäch%g Flexibel
NSLogger(❤(CocoaLumberjack
Demo
View%Inspec+on
Spark&Inspector Reveal
Spark&Inspector&der&laufenden&App&hinzufügen command alias spark p \ (void*)dlopen(" \ (…)Spark Inspector.app/(…)SparkInspector.dylib")
Live%Änderungen
Demo
Zusammenfassung Wissen&über&Code&ist&falsch NSLog()!=>!CocoaLumberjack Reveal!oder!Spark*Inspector
Profiling
Vermuten(Messen!
None
Performance
None
60#FPS!
None
Core%Data
Caching Disk%I/O
Demo
Q&A
Links&(1/2) • Florian)Bürger)→)h0p:/ /florianbuerger.com • keslcod)GmbH)→)h0p:/ /keslcod.com • LLDB)Kommandos)→)h0ps:/ /developer.apple.com/(…)
• Facebook)chisel)→)h0ps:/ /github.com/facebook/chisel • Dynamic)Library)für)iOS)→)h0p:/ /defagos.roon.io/(…) • Cocoa)Lumberjack)→)h0ps:/ /github.com/CocoaLumberjack/ CocoaLumberjack
Links&(2/2) • NSLogger)→)h,ps:/ /github.com/fpillet/NSLogger • NSLogger)zu)CoocaLumberjack)Connector)→)h,ps:/ /github.com/ steipete/NSLogger@CocoaLumberjack@connector • Spark)Inspector)→)h,p:/
/sparkinspector.com • Reveval)→)h,p:/ /revealapp.com