Transcript
Page 1: Ladění iOS aplikací nejen v Xcode [For Mobile červen 2013]

Ladění iOS aplikací nejen v Xcode

@kubabrecka iosak.cz

Page 2: Ladění iOS aplikací nejen v Xcode [For Mobile červen 2013]

LLDB

! Pokus Applu udělat GDB znovu a lépe

! Xcode používá LLDB během ladění ! všechno, co jde udělat v Xcode, jde udělat i z příkazové

konzole

Page 3: Ladění iOS aplikací nejen v Xcode [For Mobile červen 2013]

Základy ladění

!   breakpoints

! watchpoints

!   exception breakpoint

! printf, NSLog

! konzole LLDB !   “po”

Page 4: Ladění iOS aplikací nejen v Xcode [For Mobile červen 2013]

Klávesové zkratky ! Výchozí:

!   build … Cmd+B !   run … Cmd+R !   stop … Cmd+. !   show/hide console … Cmd+Shift+Y ! záložky vlevo … Cmd+1, Cmd+2, …

! Změňte si: !   step into … F11 !   step over … F10 !   run/pause … F5 !   step out … Shift+F11

Page 5: Ladění iOS aplikací nejen v Xcode [For Mobile červen 2013]

Jak zkrotit výjimku?

! Není výjimka jako výjimka ! NSException … @throw !   C++ výjimka … throw ! Výjimka procesoru … EXC_ARITHMETIC ! Signál … SIGBUS

Page 6: Ladění iOS aplikací nejen v Xcode [For Mobile červen 2013]
Page 7: Ladění iOS aplikací nejen v Xcode [For Mobile červen 2013]
Page 8: Ladění iOS aplikací nejen v Xcode [For Mobile červen 2013]

Co je to za výjimku?

! Vybrat první frame na stacku

!   “po $eax” / “po $r0”

Page 9: Ladění iOS aplikací nejen v Xcode [For Mobile červen 2013]

Nebojte se cizích stack framů

Page 10: Ladění iOS aplikací nejen v Xcode [For Mobile červen 2013]
Page 11: Ladění iOS aplikací nejen v Xcode [For Mobile červen 2013]
Page 12: Ladění iOS aplikací nejen v Xcode [For Mobile červen 2013]

Kdy chytit výjimku?

!   “on throw”

!   “on catch” ! už je pozdě, nemáme stack trace

! nejraději bychom “on throw if will not be caught”

Page 13: Ladění iOS aplikací nejen v Xcode [For Mobile červen 2013]

Zombie objects

!   K nezaplacení při ladění poškození paměti

! Signalizace: !   EXC_BAD_ACCESS ! výjimky v “běžných” funkcích … objc_retain, objc_release !   “unrecognized selector sent to instance” ! obsah proměnných nedává smysl

Page 14: Ladění iOS aplikací nejen v Xcode [For Mobile červen 2013]

Guard Malloc

! Detekce poškození paměti !   buffer overrun !   double-free

! Alokuje objekty do samostatných stránek

! Při dealokaci ! kontroluje okolí objektu ! stránku fyzicky zneplatní

Page 15: Ladění iOS aplikací nejen v Xcode [For Mobile červen 2013]

Retain loops

! Signalizace: ! Stále se zvyšuje paměťová zátěž procesu

!   Instruments – Leaks

Page 16: Ladění iOS aplikací nejen v Xcode [For Mobile červen 2013]

“po”

! po $eax

! po self

! po [[UIApplication sharedApplication] keyWindow]

! po [self.view recursiveDescription]

Page 17: Ladění iOS aplikací nejen v Xcode [For Mobile červen 2013]

Breakpointy

! řádek v kódu

! metoda (i cizí) !   b “-[UIView setFrame:]”

! selektor (pro libovolný object) !   breakpoint set –S initWithFrame:

Page 18: Ladění iOS aplikací nejen v Xcode [For Mobile červen 2013]

Breakpointy

!   Breakpoint actions

!   Breakpoint conditions

! Watchpoints

Page 19: Ladění iOS aplikací nejen v Xcode [For Mobile červen 2013]

LLDB command-line

!   Persistent objects ! po $0 = object ! nemění retain count (!)

!   p, po, expr

Page 20: Ladění iOS aplikací nejen v Xcode [For Mobile červen 2013]

UI hierarchie

! Reveal.app

!   Spark Inspector

Page 21: Ladění iOS aplikací nejen v Xcode [For Mobile červen 2013]

Live modify

! Cycript

! superDB

Page 22: Ladění iOS aplikací nejen v Xcode [For Mobile červen 2013]

Novinky v Xcode 5

!   Debug Gauges

!   Visualizations

!   Data formatters !   Summaries, synthetic children

!   v Pythonu

Page 23: Ladění iOS aplikací nejen v Xcode [For Mobile červen 2013]

Ponaučení

! Ladící arzenál je velký

! Včas poznejte, kdy laděním ztrácíte příliš mnoho času

! Chybí vám nějaký nástroj/postup pro ladění? Vytvořte si ho! !   - (void)description { … }

! Jste v koncích? Napište mi J

Page 24: Ladění iOS aplikací nejen v Xcode [For Mobile červen 2013]

Otázky?

Page 25: Ladění iOS aplikací nejen v Xcode [For Mobile červen 2013]

Otázky?

Děkuji za pozornost.

Kuba Břečka@kubabrecka

kubabrecka.comiosak.cz