SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
Debugging fasttrack
» Inspirado na apresentação
Debugging Distilled with Xcode 6 & friends
» Kendall Helmstetter Gelner (@kendalldevdiary)
Tales Pinheiro deAndrade
@talesp
» Mestre em computação pelo IME-USP
» Desenvolvedor C desde 2002
» Objective-C desde 2007 (coisas basicas antes do
iPhone!)
» iOS desde 2010
“We can notsolve
our problemswith
the same levelof
thinkingthat
createdthem”
Albert Einstein/Carl Jung
“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.
Tópicos
» Depuração visual
» Depurando fluxo
» Depurando estado
Depuraçãovisual
Depuraçãovisual
» Simulador ajuda com aspectos visuais
» Animações lentas
» Mesclagem ou desalinhamento grafico
coreAnimation
» Performance de UI mensuravel
» Inspeção visual de atributos aocultos
» Exame limitado da estrutura de aplicações de
terceiros
Xcode 6:ViewDebugging
» Dispositivos iOS 8+
» Ativado via ```Debug -> View Debugging -> Capture
View
» Paralisa a aplicação e monta hierarquia de views
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
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];
Xcode 6: Constraintdebugging
» warnings do Interface Builder
Xcode 6: Constraintdebugging
» warnings do Interface Builder
Xcode 6: Constraintdebugging
» warnings do Interface Builder
Xcode 6: Constraintdebugging
» warnings do Interface Builder
» View Debugging exibe constraints
Xcode 6: Constraintdebugging
» 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.
Simulandoa
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
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á
Breakpoints
Condiçõ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
breakpoints
» Exception breakpoints
» Symbolic Breakpoints
Exception Breakpoint
Selectively ignoring Objective-C exceptions in Xcode
Adicione a linha abaixo no arquivo ~/.lldbinit
command script import ~/Library/lldb/ignore_specified_objc_exceptions.py
Symbolic Breakpoint
Permite parar na chamada de um método
Symbolic Breakpoint
Permite 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)])
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
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]];
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!!)
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
Instrument:Time Profiler
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!
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>
Outras ferramentas
» Network link conditioner
» Parte do "Hardware IO Tools"
» Afeta todo o sistema
» Charles Proxy
» Chisel
» CoreDataPro
» Core Data Editor

Mais conteúdo relacionado

Semelhante a Debugging fasttrack: técnicas visuais e de estado para depuração rápida

A demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHPA demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHPFlávio Lisboa
 
Otimização, dicas de implementação, como resolver problemas by Adriano Santan...
Otimização, dicas de implementação, como resolver problemas by Adriano Santan...Otimização, dicas de implementação, como resolver problemas by Adriano Santan...
Otimização, dicas de implementação, como resolver problemas by Adriano Santan...iPhoneDevBr
 
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
O uso de PWA e o futuro do desenvolvimento mobile com React Native e KotlinO uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
O uso de PWA e o futuro do desenvolvimento mobile com React Native e KotlinDavid Robert Camargo de Campos
 
InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acop...
InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acop...InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acop...
InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acop...iMasters
 
Desenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-TouchDesenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-TouchCampus Party Brasil
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlDiego Tremper
 
ASP.NET e Visual Studio 2010
ASP.NET e Visual Studio 2010ASP.NET e Visual Studio 2010
ASP.NET e Visual Studio 2010Norton Guimarães
 
Robustez de Software - Como ouvir menos reclamações dos seus chefes
Robustez de Software - Como ouvir menos reclamações dos seus chefesRobustez de Software - Como ouvir menos reclamações dos seus chefes
Robustez de Software - Como ouvir menos reclamações dos seus chefesDavid Robert Camargo de Campos
 
Novidades incríveis do Android em 2023
Novidades incríveis do Android em 2023Novidades incríveis do Android em 2023
Novidades incríveis do Android em 2023Nelson Glauber Leal
 
TDC2016SP - Evoluindo aplicações mobile com o Google VR SDK
TDC2016SP - Evoluindo aplicações mobile com o Google VR SDKTDC2016SP - Evoluindo aplicações mobile com o Google VR SDK
TDC2016SP - Evoluindo aplicações mobile com o Google VR SDKtdc-globalcode
 
Debugging tips and tricks
Debugging tips and tricksDebugging tips and tricks
Debugging tips and tricksTales Andrade
 
Microsoft S2B - C# ASP.NET
Microsoft S2B - C# ASP.NETMicrosoft S2B - C# ASP.NET
Microsoft S2B - C# ASP.NETphilipsoares
 
RedGate .NET Reflector
RedGate .NET ReflectorRedGate .NET Reflector
RedGate .NET ReflectorNuno Gomes
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013Giovanni Bassi
 

Semelhante a Debugging fasttrack: técnicas visuais e de estado para depuração rápida (20)

A demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHPA demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Otimização, dicas de implementação, como resolver problemas by Adriano Santan...
Otimização, dicas de implementação, como resolver problemas by Adriano Santan...Otimização, dicas de implementação, como resolver problemas by Adriano Santan...
Otimização, dicas de implementação, como resolver problemas by Adriano Santan...
 
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
O uso de PWA e o futuro do desenvolvimento mobile com React Native e KotlinO uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
 
InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acop...
InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acop...InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acop...
InterCon 2016 - Refactor direto e reto: migração de uma arquitetura 100% acop...
 
IBDESIGNABLE
IBDESIGNABLEIBDESIGNABLE
IBDESIGNABLE
 
Desenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-TouchDesenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-Touch
 
Qualidade de código Android
Qualidade de código AndroidQualidade de código Android
Qualidade de código Android
 
Java 03
Java 03Java 03
Java 03
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControl
 
ASP.NET e Visual Studio 2010
ASP.NET e Visual Studio 2010ASP.NET e Visual Studio 2010
ASP.NET e Visual Studio 2010
 
Robustez de Software - Como ouvir menos reclamações dos seus chefes
Robustez de Software - Como ouvir menos reclamações dos seus chefesRobustez de Software - Como ouvir menos reclamações dos seus chefes
Robustez de Software - Como ouvir menos reclamações dos seus chefes
 
Novidades incríveis do Android em 2023
Novidades incríveis do Android em 2023Novidades incríveis do Android em 2023
Novidades incríveis do Android em 2023
 
Debugging node
Debugging nodeDebugging node
Debugging node
 
TDC2016SP - Evoluindo aplicações mobile com o Google VR SDK
TDC2016SP - Evoluindo aplicações mobile com o Google VR SDKTDC2016SP - Evoluindo aplicações mobile com o Google VR SDK
TDC2016SP - Evoluindo aplicações mobile com o Google VR SDK
 
Aula1
Aula1Aula1
Aula1
 
Debugging tips and tricks
Debugging tips and tricksDebugging tips and tricks
Debugging tips and tricks
 
Microsoft S2B - C# ASP.NET
Microsoft S2B - C# ASP.NETMicrosoft S2B - C# ASP.NET
Microsoft S2B - C# ASP.NET
 
RedGate .NET Reflector
RedGate .NET ReflectorRedGate .NET Reflector
RedGate .NET Reflector
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013
 

Mais de Tales Andrade

Debugging tips and tricks - coders on beers Santiago
Debugging tips and tricks -  coders on beers SantiagoDebugging tips and tricks -  coders on beers Santiago
Debugging tips and tricks - coders on beers SantiagoTales Andrade
 
Delegateless Coordinators - take 2
Delegateless Coordinators - take 2Delegateless Coordinators - take 2
Delegateless Coordinators - take 2Tales Andrade
 
Delegateless Coordinator
Delegateless CoordinatorDelegateless Coordinator
Delegateless CoordinatorTales Andrade
 
Swift na linha de comando
Swift na linha de comandoSwift na linha de comando
Swift na linha de comandoTales Andrade
 
Usando POP com Programação Funcional
Usando POP com Programação FuncionalUsando POP com Programação Funcional
Usando POP com Programação FuncionalTales Andrade
 
Swift!.opcionais.oh!.my()?!?
Swift!.opcionais.oh!.my()?!?Swift!.opcionais.oh!.my()?!?
Swift!.opcionais.oh!.my()?!?Tales Andrade
 

Mais de Tales Andrade (7)

Debugging tips and tricks - coders on beers Santiago
Debugging tips and tricks -  coders on beers SantiagoDebugging tips and tricks -  coders on beers Santiago
Debugging tips and tricks - coders on beers Santiago
 
Delegateless Coordinators - take 2
Delegateless Coordinators - take 2Delegateless Coordinators - take 2
Delegateless Coordinators - take 2
 
Delegateless Coordinator
Delegateless CoordinatorDelegateless Coordinator
Delegateless Coordinator
 
Swift na linha de comando
Swift na linha de comandoSwift na linha de comando
Swift na linha de comando
 
Usando POP com Programação Funcional
Usando POP com Programação FuncionalUsando POP com Programação Funcional
Usando POP com Programação Funcional
 
Swift!.opcionais.oh!.my()?!?
Swift!.opcionais.oh!.my()?!?Swift!.opcionais.oh!.my()?!?
Swift!.opcionais.oh!.my()?!?
 
Tales@tdc
Tales@tdcTales@tdc
Tales@tdc
 

Debugging fasttrack: técnicas visuais e de estado para depuração rápida

  • 1. Debugging fasttrack » Inspirado na apresentação Debugging Distilled with Xcode 6 & friends » Kendall Helmstetter Gelner (@kendalldevdiary)
  • 2. Tales Pinheiro deAndrade @talesp » Mestre em computação pelo IME-USP » Desenvolvedor C desde 2002 » Objective-C desde 2007 (coisas basicas antes do iPhone!) » iOS desde 2010
  • 3. “We can notsolve our problemswith the same levelof thinkingthat createdthem” Albert Einstein/Carl Jung
  • 4. “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.
  • 5. Tópicos » Depuração visual » Depurando fluxo » Depurando estado
  • 7. Depuraçãovisual » Simulador ajuda com aspectos visuais » Animações lentas » Mesclagem ou desalinhamento grafico
  • 8. coreAnimation » Performance de UI mensuravel » Inspeção visual de atributos aocultos » Exame limitado da estrutura de aplicações de terceiros
  • 9. Xcode 6:ViewDebugging » Dispositivos iOS 8+ » Ativado via ```Debug -> View Debugging -> Capture View » Paralisa a aplicação e monta hierarquia de views
  • 10. 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
  • 11. 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];
  • 12. Xcode 6: Constraintdebugging » warnings do Interface Builder
  • 13. Xcode 6: Constraintdebugging » warnings do Interface Builder
  • 14. Xcode 6: Constraintdebugging » warnings do Interface Builder
  • 15. Xcode 6: Constraintdebugging » warnings do Interface Builder » View Debugging exibe constraints
  • 16. Xcode 6: Constraintdebugging » 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.
  • 17. Simulandoa 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
  • 18. 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á
  • 19. Breakpoints Condiçõ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
  • 21. Exception Breakpoint Selectively ignoring Objective-C exceptions in Xcode Adicione a linha abaixo no arquivo ~/.lldbinit command script import ~/Library/lldb/ignore_specified_objc_exceptions.py
  • 22. Symbolic Breakpoint Permite parar na chamada de um método
  • 23. Symbolic Breakpoint Permite 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)])
  • 24. 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
  • 25. 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]];
  • 26. 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!!)
  • 27. 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
  • 29. 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!
  • 30. 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>
  • 31. Outras ferramentas » Network link conditioner » Parte do "Hardware IO Tools" » Afeta todo o sistema » Charles Proxy » Chisel » CoreDataPro » Core Data Editor