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
38
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
61
Swift 2 in Production
florianbuerger
0
57
Dem Fehler auf der Spur - Mobile Testing Days 2015
florianbuerger
0
58
WatchKit overview
florianbuerger
0
110
Swift Intro
florianbuerger
1
150
AppCode versus Xcode
florianbuerger
0
360
Other Decks in Education
See All in Education
SUMMER SCHOOL 2024
pnuslide
0
150
前期教育実習事前指導0221
naradai
0
140
スクフェスの学びにチームを惹き込め! 社内同時視聴会のすゝめ!
pokotyamu
0
780
インターアクトクラブについて:国際ロータリー第2720地区インターアクト委員会 委員長・大分東ロータリークラブ 阿部 克哉 氏
2720japanoke
0
710
AWS試験全冠したら新しい道が開けた話
nagisa53
3
1.1k
5 занятие. Разбор метода "8 кубиков"бизнес-модели #ideaNN 16.02.2024.
karlov
0
190
Tips for the Presentation - Lecture 2 - Advanced Topics in Big Data (4023256FNR)
signer
PRO
0
130
week3@tcue2024
nonxxxizm
0
530
パフォーマンス・チューニング入門
oracle4engineer
PRO
2
730
論文の読み方 / How to survey
kaityo256
PRO
177
120k
Before You Create Something
nandenjin
0
120
[SemanaX-UFCG-2024] Guia descomplicado de entrevistas FAANG
hugaomarques
2
460
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
275
13k
Art, The Web, and Tiny UX
lynnandtonic
290
19k
StorybookのUI Testing Handbookを読んだ
zakiyama
13
4.6k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
18
7k
The MySQL Ecosystem @ GitHub 2015
samlambert
244
12k
Clear Off the Table
cherdarchuk
85
310k
Agile that works and the tools we love
rasmusluckow
325
20k
Teambox: Starting and Learning
jrom
128
8.4k
Rails Girls Zürich Keynote
gr2m
91
13k
Designing the Hi-DPI Web
ddemaree
276
33k
5 minutes of I Can Smell Your CMS
philhawksworth
199
19k
Why You Should Never Use an ORM
jnunemaker
PRO
51
8.7k
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