debugging fast track

31
Debugging fast track » Inspirado na apresentação Debugging Distilled with Xcode 6 & friends » Kendall Helmstetter Gelner (@kendalldevdiary)

Upload: tales-andrade

Post on 28-Jun-2015

195 views

Category:

Software


3 download

DESCRIPTION

Apresentação sobre diversas técnicas e ferramentas para depurar seu app iOS, usando Xcode 6 e ferramentas de terceiros

TRANSCRIPT

Page 1: Debugging fast track

Debugging fast track» Inspirado na apresentação

Debugging Distilled with Xcode 6 & friends

» Kendall Helmstetter Gelner (@kendalldevdiary)

Page 2: Debugging fast track

Tales Pinheiro de Andrade@talesp

» Mestre em computação pelo IME-USP

» Desenvolvedor C desde 2002

» Objective-C desde 2007 (coisas basicas antes do iPhone!)

» iOS desde 2010

Page 3: Debugging fast track

“We can not solve our problems with the same level of thinking that created them”Albert Einstein/Carl Jung

Page 4: Debugging fast track

“The first moral of the story is that program testing can be used very effectively to show the presence of bugs but never to show their absence.”Edsger W. Dijkstra

On the reliability of programs.

Page 5: Debugging fast track

Tópicos» Depuração visual

» Depurando fluxo

» Depurando estado

Page 6: Debugging fast track

Depuração visual

Page 7: Debugging fast track

Depuração visual» Simulador ajuda com aspectos visuais

» Animações lentas

» Mesclagem ou desalinhamento grafico

Page 8: Debugging fast track

core Animation» Performance de UI mensuravel

» Inspeção visual de atributos aocultos

» Exame limitado da estrutura de aplicações de terceiros

Page 9: Debugging fast track

Xcode 6: View Debugging» Dispositivos iOS 8+

» Ativado via ```Debug -> View Debugging -> Capture View

» Paralisa a aplicação e monta hierarquia de views

Page 10: Debugging fast track

Reveal» revealapp.com - trial disponivel, $89

» Mostra hierarquia de forma 2D ou 3D, permite manipulação das propriedades

» Integração simples

» Facil de usar/integrar

» static library

» Dynamic Library

» cocoapod

Page 11: Debugging fast track

Flex» FLEX: Flipboard EXplorer

» "Debug" visual in-app criado pelo Flipboard

» cocoapods

» inspeção de elementos

» navegação na arvore de subviews

» manipulação de atributos

Para exibir

[[FLEXManager sharedManager] showExplorer];

Page 12: Debugging fast track

Xcode 6: Constraint debugging» warnings do Interface Builder

Page 13: Debugging fast track

Xcode 6: Constraint debugging» warnings do Interface Builder

Page 14: Debugging fast track

Xcode 6: Constraint debugging» warnings do Interface Builder

Page 15: Debugging fast track

Xcode 6: Constraint debugging» warnings do Interface Builder

» View Debugging exibe constraints

Page 16: Debugging fast track

Xcode 6: Constraint debugging» Pense sobre restrições como largura / altura mais

a informação de onde algo deve ir.

» Um único erro pode cascatear para muitos, assim que encontrar a raiz do que a restrição problema está vinculado.

Page 17: Debugging fast track

Simulando a Localização» É possível configurar

manualmente a localização no simulador;

» Usar arquivo GPX (simulando um caminho)

» Automator permite simulação mais precisa (direção e velocidade)

» Apenas no simulador, não no dispositivo

Page 18: Debugging fast track

Breakpoints» mais util quando ele não para

» uso de expressões como condição de parada

» Expressão deve ser usada na linguagem onde o código está

Page 19: Debugging fast track

BreakpointsCondições e expressões

» lldb deve poder interpretar o breakpoint

» com breakpoint "auto-continue", é possível aidionar pequenos blocos de código para adicionar logica on the fly

Page 20: Debugging fast track

breakpoints» Exception breakpoints

» Symbolic Breakpoints

Page 21: Debugging fast track

Exception BreakpointSelectively ignoring Objective-C exceptions in Xcode

Adicione a linha abaixo no arquivo ~/.lldbinit

command script import ~/Library/lldb/ignore_specified_objc_exceptions.py

Page 22: Debugging fast track

Symbolic BreakpointPermite parar na chamada de um método

Page 23: Debugging fast track

Symbolic BreakpointPermite parar na chamada de um método

([@"User" isEqualToString:[(NSEntityDescription*)[(NSManagedObject*)*(int*)($esp+4) entity] name]] && [@"contact" isEqualToString:(NSManagedObject*)*(int*)($esp+16)]) || ([@"Contact" isEqualToString:[(NSEntityDescription*)[(NSManagedObject*)*(int*)($esp+4) entity] name]] && [@"user" isEqualToString:(NSManagedObject*)*(int*)($esp+16)])

Page 24: Debugging fast track

Log melhorado» Função/método + número da linha:

#define ALog(format, ...) DLog((@"%s [L%d] " format), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)#define DLog(format, ...) ALog(format, ##__VA_ARGS__)

» Swift não tem #DEFINE, use bibliotecas externas

» XCGLogger

Page 25: Debugging fast track

Log melhorado» Opção melhor para Objective-C: CocoaLumberjack

» niveis de debugs

» cores no console via plugin XcodeColors (Alcatraz)

» loggers para serviços de terceiros

[DDLog addLogger:[DDASLLogger sharedInstance]]; [DDLog addLogger:[DDTTYLogger sharedInstance]]; [[DDTTYLogger sharedInstance] setColorsEnabled:YES]; [[DDTTYLogger sharedInstance] setForegroundColor:[UIColor blueColor] backgroundColor:nil forFlag:LOG_FLAG_INFO]; [DDLog addLogger:[CrashlyticsLogger sharedInstance]];

Page 26: Debugging fast track

Log melhorado» Logs são pesados, use com cuidado

» Use blocks para logs pesados

» Background logging com Notificações locais (neanderthal debugging - Michael Oliver)(APENAS EM DESENVOLVIMENTO!!!1!!1!1!!)

Page 27: Debugging fast track

Instrument: Time Profiler» Forma ótima de verificar onde o app está lento

» Ajuda a focar primeiro onde tem mais problema de performance

» Permite visualizar por nucleo de processador

» Xcode Profiler serve como guide line

» Record Waiting threads ajuda

Page 28: Debugging fast track

Instrument: Time Profiler

Page 29: Debugging fast track

lldb - expressions» acessada via expr no console do lldb

» Permite rodar código real em run-time

» permite definir variáveis globais com prefixo (use id para tipos complexos)

» patcht em real-time!

Page 30: Debugging fast track

lldb - comandos uteis» po recursiveDesccription: dump da hierarquia de

views

» crash na chamada de objc_msgsend?

» p (char *)$ecx (simulator)

» p (char *)$r1 (device)

» Watchpoints

» watchpoint set variable self->_myProp

» watchpoint delete <number>

Page 31: Debugging fast track

Outras ferramentas» Network link conditioner

» Parte do "Hardware IO Tools"

» Afeta todo o sistema

» Charles Proxy

» Chisel

» CoreDataPro

» Core Data Editor