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
47
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
73
Swift 2 in Production
florianbuerger
0
66
Dem Fehler auf der Spur - Mobile Testing Days 2015
florianbuerger
0
70
WatchKit overview
florianbuerger
0
140
Swift Intro
florianbuerger
1
180
AppCode versus Xcode
florianbuerger
0
410
Other Decks in Education
See All in Education
Course Review - Lecture 12 - Next Generation User Interfaces (4018166FNR)
signer
PRO
0
1.7k
SkimaTalk Introduction for Students
skimatalk
0
380
OJTに夢を見すぎていませんか? ロールプレイ研修の試行錯誤/tryanderror-in-roleplaying-training
takipone
1
150
Are puppies a ranking factor?
jonoalderson
0
830
技術勉強会 〜 OAuth & OIDC 入門編 / 20250528 OAuth and OIDC
oidfj
5
1.2k
Pythonパッケージ管理 [uv] 完全入門
mickey_kubo
20
14k
バックオフィス組織にも「チームトポロジー」の考えが使えるかもしれない!!
masakiokuda
0
110
Sponsor the Conference | VizChitra 2025
vizchitra
0
550
OpenRobomaster 中国のロボットコンテスト 日本連携の可能性
takasumasakazu
0
450
JPCERTから始まる草の根活動~セキュリティ文化醸成のためのアクション~
masakiokuda
0
180
AIC 103 - Applications of Property Valuation: Essential Slides
rmccaic
0
210
Tutorial: Foundations of Blind Source Separation and Its Advances in Spatial Self-Supervised Learning
yoshipon
1
120
Featured
See All Featured
How GitHub (no longer) Works
holman
314
140k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
60k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
500
Java REST API Framework Comparison - PWX 2021
mraible
31
8.7k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Building Applications with DynamoDB
mza
95
6.5k
Embracing the Ebb and Flow
colly
86
4.7k
Optimizing for Happiness
mojombo
379
70k
Designing for Performance
lara
609
69k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.8k
Raft: Consensus for Rubyists
vanstee
140
7k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
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