Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Debugging & Profiling
Search
Florian
June 04, 2014
Education
1
45
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
66
Swift 2 in Production
florianbuerger
0
62
Dem Fehler auf der Spur - Mobile Testing Days 2015
florianbuerger
0
64
WatchKit overview
florianbuerger
0
120
Swift Intro
florianbuerger
1
160
AppCode versus Xcode
florianbuerger
0
390
Other Decks in Education
See All in Education
Image compression
hachama
0
350
Evaluation Methods - Lecture 6 - Human-Computer Interaction (1023841ANR)
signer
PRO
0
800
Ch2_-_Partie_2.pdf
bernhardsvt
0
120
MySmartSTEAM2425
cbtlibrary
0
110
Ch2_-_Partie_1.pdf
bernhardsvt
0
130
Carving the Way to Ruby Engineering
koic
3
780
AI 時代軟體工程師的持續升級
mosky
0
1.5k
付箋を使ったカラオケでワイワイしましょう / Scrum Fest Okinawa 2024
bonbon0605
0
130
Flinga
matleenalaakso
2
14k
ルクソールとツタンカーメン
masakamayama
1
1.1k
1127
cbtlibrary
0
180
Medicare 101 for 2025
robinlee
PRO
0
440
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
32
6.4k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
20
2.4k
The World Runs on Bad Software
bkeepers
PRO
67
11k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
365
25k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.2k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.8k
Building a Scalable Design System with Sketch
lauravandoore
460
33k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
520
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
Testing 201, or: Great Expectations
jmmastey
41
7.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