ladění ios aplikací nejen v xcode [for mobile červen 2013]
DESCRIPTION
Ladění prostě patří k vývoji, mnozí však tuto činnost dělají velice neradi a Xcode nám to příliš nezpříjemňuje. Přijďte se naučit správně zacházet s vyjímkami, vyznat se se výpisech stack framů, používat jiné nástroje než Xcode a celkově efektivně ladit programy.TRANSCRIPT
Ladění iOS aplikací nejen v Xcode
@kubabrecka iosak.cz
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
Základy ladění
! breakpoints
! watchpoints
! exception breakpoint
! printf, NSLog
! konzole LLDB ! “po”
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
Jak zkrotit výjimku?
! Není výjimka jako výjimka ! NSException … @throw ! C++ výjimka … throw ! Výjimka procesoru … EXC_ARITHMETIC ! Signál … SIGBUS
Co je to za výjimku?
! Vybrat první frame na stacku
! “po $eax” / “po $r0”
Nebojte se cizích stack framů
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”
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
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í
Retain loops
! Signalizace: ! Stále se zvyšuje paměťová zátěž procesu
! Instruments – Leaks
“po”
! po $eax
! po self
! po [[UIApplication sharedApplication] keyWindow]
! po [self.view recursiveDescription]
Breakpointy
! řádek v kódu
! metoda (i cizí) ! b “-[UIView setFrame:]”
! selektor (pro libovolný object) ! breakpoint set –S initWithFrame:
Breakpointy
! Breakpoint actions
! Breakpoint conditions
! Watchpoints
LLDB command-line
! Persistent objects ! po $0 = object ! nemění retain count (!)
! p, po, expr
UI hierarchie
! Reveal.app
! Spark Inspector
Live modify
! Cycript
! superDB
Novinky v Xcode 5
! Debug Gauges
! Visualizations
! Data formatters ! Summaries, synthetic children
! v Pythonu
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
Otázky?
Otázky?
Děkuji za pozornost.
Kuba Břečka@kubabrecka
kubabrecka.comiosak.cz