SlideShare uma empresa Scribd logo
1 de 34
Debugging tips and tricks
Everyone knows that debugging is
twice as hard as writing a program in
the first place. So if you're as clever as
you can be when you write it, how will
you ever debug it
Brian Kernighan
The first moral of the story is that
program testing can be used very
effectively to show the presence of
bugs but never their absence
Edsger W. Dijkstra
Fundamentos
• Breakpoint
• Watchpoint
• Debug Navigator
• Editor Area
• Continue to Here (gutter)
• Debug bar
• Show debug area (cmd + shift + y)
• variable view
• watch
• console
Fundamentos
• Breakpoint
• Watchpoint
• Debug Navigator
• Editor Area
• Continue to Here (gutter)
• Debug bar
• Show debug area (cmd + shift + y)
• variable view
• watch
• console
• Frame
Fundamentos
• Debug bar
• (des)ativar breakpoints
• Continuar execução
• Step over
• Executa a linha azul e segue para próxima
• Step in
• “entra” no método chamado
• Step out
• “Sai” do método chamado
Fundamentos
• Debug bar
• Debug View Hierarchy
• Simulate Location
• Choose stack frame
Fundamentos
• watchpoint
• parece breakpoint
• para na mudança de valor
• Variável ou endereço de memória
• view memory
• breakpoint navigator
• edit
• condition
• action
• options (apenas uma)
lldb - low level debugger
• inicio
• terminologia
• personalizando comandos
lldb - low level debugger
• LLDB
• next generation
• high-performance debugger.
• It is built as a set of reusable components which highly leverage
existing libraries in the larger LLVM Project, such as the Clang
expression parser and LLVM disassembler.
• clang embutido
• usa o compilador para parse das expressões
lldb - low level debugger
• Usando Breakpoint
• Você já fez isso:
NSLog(@“Log just for debug: [%@]", self.objects);
• Ou isso?
NSInteger n = 0; //[self someMethodThatReturnInteger];
• Ou isso?
if (YES || [self someMethodThatReturnBool]) {
• Ou isso?
- (BOOL)someMethodThatReturnBool {
return YES;
//TODO: implement
}
lldb - breakpoints
• Breakpoint para a execução em uma instrução
• Permitem adicionar comandos apenas do debug
• condições de parada
• Via comando
breakpoint set —file ViewController.swift —line 7
• Via Xcode - basta clicar no gutter
lldb - comandos
• Expression (expression)
• Print (print / expression —)
• parray
• Print Object (po / expression -O —)
• poarray
• Watchpoint (watchpoint)
Expressões
• avaliam como código
• resultado exibido e guardado em variável de conveniência ($1, $2, etc)
• podem fazer muito
• aritmetica
• chamada de funções
• type casting
• atribuições
• declaração de variáveis (tipo variável = valor ou tipo $variavel = valor)
lldb - low level debugger
- Symbolic Breakpoint
lldb - low level debugger
- Symbolic Breakpoint
- Assinatura do método
lldb - low level debugger
- Symbolic Breakpoint
- Assinatura do método
- Simbolo
lldb - low level debugger
- Exception Breakpoint
lldb - editando breakpoints
lldb - condições de parada
lldb - condições de parada
• - [NSManagedObject setValue:forKey:]
lldb - mais expressões
• e count = 42
(NSUInteger) $4 = 42
• e NSMutableDictionary *$dict = [staticDict mutableCopy];
e $dict[@“key”] = @“newValue”;
e staticDict = $dict;
lldb - mais expressões
(lldb) e char *$str = (char *)malloc(8)
(lldb) e (void)strcpy($str, "munkeys")
(lldb) e $str[1] = 'o'
(char) $0 = 'o'
(lldb) p $str
(char *) $str = 0x00007fd04a900040 “monkeys"
(lldb) x/4c $str
0x7fd04a900040: monk
lldb - low level debugger
- Watchpoint
- Monitora estado/valor de
variável
- Inspetor de variáveis
lldb - low level debugger
- Watchpoint
- Monitora estado/valor de
variável
- Inspetor de variáveis
- Console
- Permite editar wp e
adicionar condição de
parada
- não aparece no Breakpoint
Navigator
lldb - low level debugger
lldb - low level debugger
• Rule of Thumb - keep it fast
• “Automatically continue after evaluating”
• po $arg1
• bt/bt all
• Audible breakpoints
• breakpoint com linha de comando
• Command: say
• Arguments: -v, Zarvox, “Your breakpoint %B has been hit %H times”
Python + Chisel
• ~/.lldbinit-Xcode
• ~/.lldbinit
• Aliases
• default settings
• type formatting
• import python modules
• bind python commands
Chisel - alguns comandos úteis
• (lldb) script import os
(lldb) script os.system("open http://concretesolutions.com.br“)
• Permite importar script python com
command script import ~/myCommands.py
Chisel - alguns comandos úteis
• Chisel - Instalando:
• brew update
• brew install chisel
• pviews - exibe hierarquia de view
• pvc - exibe hierarquia de view controllers
• visualize - abre Preview.app com conteúdo de UIImage, CGImageRef,
UIView, CALayer
• fv/fvc - busca view/view controller pelo nome de classe via regex
• alamborder - adiciona borda em view com layout ambíguo
• mwarning - simula memory warning
Behaviors
• debug navigator aparecendo - só alterar
• console
• variables view, etc
Refereincias
• http://www.slideshare.net/talesp/debugging-fast-track
• https://github.com/facebook/chisel
• https://www.objc.io/issues/19-debugging/lldb-debugging/#let-s-dance
• http://lldb.llvm.org/tutorial.html
• https://www.bignerdranch.com/blog/xcode-breakpoint-wizardry/
www.concretesolutions.com.br
blog.concretesolutions.com.br
Rio de Janeiro – Rua São José, 90 – cj. 2121
Centro – (21) 2240-2030
São Paulo - Rua Sansão Alves dos Santos, 433
4º andar - Brooklin - (11) 4119-0449

Mais conteúdo relacionado

Mais procurados

Javascript para CSharpers 2 - Functions
Javascript para CSharpers   2 - FunctionsJavascript para CSharpers   2 - Functions
Javascript para CSharpers 2 - FunctionsWesley Lemos
 
tmn - Introdução ao JavaScript
tmn - Introdução ao JavaScripttmn - Introdução ao JavaScript
tmn - Introdução ao JavaScriptClaudio Gamboa
 
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Emerson Macedo
 
[Curso Java Básico] Aula 13: Operadores (Aritiméticos, Lógicos e Relacionais)
[Curso Java Básico] Aula 13: Operadores (Aritiméticos, Lógicos e Relacionais) [Curso Java Básico] Aula 13: Operadores (Aritiméticos, Lógicos e Relacionais)
[Curso Java Básico] Aula 13: Operadores (Aritiméticos, Lógicos e Relacionais) Loiane Groner
 
OOP (in portuguese)
OOP (in portuguese)OOP (in portuguese)
OOP (in portuguese)Bruno Pedro
 
Desenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de ComandoDesenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de Comandogarux
 
Aop Aspect J 1.5.4 Capitulo 04
Aop Aspect J 1.5.4 Capitulo 04Aop Aspect J 1.5.4 Capitulo 04
Aop Aspect J 1.5.4 Capitulo 04Diego Pacheco
 
Testes Automatizados e o iOS
Testes Automatizados e o iOSTestes Automatizados e o iOS
Testes Automatizados e o iOSRicardo Valeriano
 
Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Leonardo Melo Santos
 
Apresentação Design Adaptador
Apresentação Design AdaptadorApresentação Design Adaptador
Apresentação Design Adaptadorrobson santiago
 
Paradigmas de Linguagens de Programacao - Aula #3
Paradigmas de Linguagens de Programacao - Aula #3Paradigmas de Linguagens de Programacao - Aula #3
Paradigmas de Linguagens de Programacao - Aula #3Ismar Silveira
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsHelder da Rocha
 
Curso de OO com C# - Parte 06 - ADO.NET
Curso de OO com C# - Parte 06 - ADO.NETCurso de OO com C# - Parte 06 - ADO.NET
Curso de OO com C# - Parte 06 - ADO.NETLeonardo Melo Santos
 
[JS EXPERIENCE 2018] Uma visão geral sobre recursão e trampolines - Ana Basto...
[JS EXPERIENCE 2018] Uma visão geral sobre recursão e trampolines - Ana Basto...[JS EXPERIENCE 2018] Uma visão geral sobre recursão e trampolines - Ana Basto...
[JS EXPERIENCE 2018] Uma visão geral sobre recursão e trampolines - Ana Basto...iMasters
 
Construindo aplicações CLI com Symfony Console
Construindo aplicações CLI com Symfony ConsoleConstruindo aplicações CLI com Symfony Console
Construindo aplicações CLI com Symfony ConsoleBruno Ricardo Siqueira
 

Mais procurados (20)

Javascript para CSharpers 2 - Functions
Javascript para CSharpers   2 - FunctionsJavascript para CSharpers   2 - Functions
Javascript para CSharpers 2 - Functions
 
tmn - Introdução ao JavaScript
tmn - Introdução ao JavaScripttmn - Introdução ao JavaScript
tmn - Introdução ao JavaScript
 
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
 
Aula 4
Aula 4Aula 4
Aula 4
 
[Curso Java Básico] Aula 13: Operadores (Aritiméticos, Lógicos e Relacionais)
[Curso Java Básico] Aula 13: Operadores (Aritiméticos, Lógicos e Relacionais) [Curso Java Básico] Aula 13: Operadores (Aritiméticos, Lógicos e Relacionais)
[Curso Java Básico] Aula 13: Operadores (Aritiméticos, Lógicos e Relacionais)
 
Padrão Command
Padrão CommandPadrão Command
Padrão Command
 
OOP (in portuguese)
OOP (in portuguese)OOP (in portuguese)
OOP (in portuguese)
 
Desenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de ComandoDesenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de Comando
 
Aop Aspect J 1.5.4 Capitulo 04
Aop Aspect J 1.5.4 Capitulo 04Aop Aspect J 1.5.4 Capitulo 04
Aop Aspect J 1.5.4 Capitulo 04
 
Testes Automatizados e o iOS
Testes Automatizados e o iOSTestes Automatizados e o iOS
Testes Automatizados e o iOS
 
Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#
 
Apresentação Design Adaptador
Apresentação Design AdaptadorApresentação Design Adaptador
Apresentação Design Adaptador
 
Paradigmas de Linguagens de Programacao - Aula #3
Paradigmas de Linguagens de Programacao - Aula #3Paradigmas de Linguagens de Programacao - Aula #3
Paradigmas de Linguagens de Programacao - Aula #3
 
Operadores Java
Operadores JavaOperadores Java
Operadores Java
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e Streams
 
Depuração de software
Depuração de softwareDepuração de software
Depuração de software
 
Curso de OO com C# - Parte 06 - ADO.NET
Curso de OO com C# - Parte 06 - ADO.NETCurso de OO com C# - Parte 06 - ADO.NET
Curso de OO com C# - Parte 06 - ADO.NET
 
[JS EXPERIENCE 2018] Uma visão geral sobre recursão e trampolines - Ana Basto...
[JS EXPERIENCE 2018] Uma visão geral sobre recursão e trampolines - Ana Basto...[JS EXPERIENCE 2018] Uma visão geral sobre recursão e trampolines - Ana Basto...
[JS EXPERIENCE 2018] Uma visão geral sobre recursão e trampolines - Ana Basto...
 
Parte1c
Parte1cParte1c
Parte1c
 
Construindo aplicações CLI com Symfony Console
Construindo aplicações CLI com Symfony ConsoleConstruindo aplicações CLI com Symfony Console
Construindo aplicações CLI com Symfony Console
 

Destaque (20)

E learnig
E learnigE learnig
E learnig
 
E learnig
E learnigE learnig
E learnig
 
China climb
China climbChina climb
China climb
 
Ghana
GhanaGhana
Ghana
 
Halendid blog
Halendid blogHalendid blog
Halendid blog
 
Container networking
Container networkingContainer networking
Container networking
 
John A resume
John A resumeJohn A resume
John A resume
 
Ilie cioara murim-si_inviem_in_fiecare_clipa
Ilie cioara murim-si_inviem_in_fiecare_clipaIlie cioara murim-si_inviem_in_fiecare_clipa
Ilie cioara murim-si_inviem_in_fiecare_clipa
 
RESPONSE TO ISSUES RAISED BY THE HOUSE COMMITTEE ON FCT
RESPONSE TO ISSUES RAISED BY THE HOUSE COMMITTEE ON FCTRESPONSE TO ISSUES RAISED BY THE HOUSE COMMITTEE ON FCT
RESPONSE TO ISSUES RAISED BY THE HOUSE COMMITTEE ON FCT
 
上海世博會資料 Final
上海世博會資料 Final 上海世博會資料 Final
上海世博會資料 Final
 
Summary linked in
Summary linked inSummary linked in
Summary linked in
 
Rome trip2012
Rome trip2012Rome trip2012
Rome trip2012
 
El Romanticisme
El RomanticismeEl Romanticisme
El Romanticisme
 
New york
New york New york
New york
 
Scaling Your Database In The Cloud
Scaling Your Database In The CloudScaling Your Database In The Cloud
Scaling Your Database In The Cloud
 
Graduation 2011 presentation oct11
Graduation 2011 presentation oct11Graduation 2011 presentation oct11
Graduation 2011 presentation oct11
 
New york new york
New york new yorkNew york new york
New york new york
 
China
ChinaChina
China
 
ART ROMÀNIC I GÒTIC
ART ROMÀNIC I GÒTICART ROMÀNIC I GÒTIC
ART ROMÀNIC I GÒTIC
 
La pintura del segle XX
La pintura del segle XXLa pintura del segle XX
La pintura del segle XX
 

Semelhante a Debugging Tips and Tricks

Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Introdução ao JS1.pptx
Introdução ao JS1.pptxIntrodução ao JS1.pptx
Introdução ao JS1.pptxLuanDev1
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a TestesGregorio Melo
 
Produtividade com Eclipse IDE
Produtividade com Eclipse IDEProdutividade com Eclipse IDE
Produtividade com Eclipse IDEAnderson Silveira
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valorKinn Julião
 
TDC2013 Otimizando-C
TDC2013 Otimizando-CTDC2013 Otimizando-C
TDC2013 Otimizando-Cosmarcf
 
Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Railstchandy
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013Giovanni Bassi
 
C#4 - Parte 1 - Dinamismo E Argumentos opcionais e nomeados
C#4 - Parte 1 - Dinamismo E Argumentos opcionais e nomeadosC#4 - Parte 1 - Dinamismo E Argumentos opcionais e nomeados
C#4 - Parte 1 - Dinamismo E Argumentos opcionais e nomeadosGiovanni Bassi
 
Prática da disciplina de laboratório de conversão de energia
Prática da disciplina de laboratório de conversão de energiaPrática da disciplina de laboratório de conversão de energia
Prática da disciplina de laboratório de conversão de energiaHeitor Galvão
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
S2 b desenvolvimento de sistemas [reparado]
S2 b   desenvolvimento de sistemas [reparado]S2 b   desenvolvimento de sistemas [reparado]
S2 b desenvolvimento de sistemas [reparado]Milena Rebouças
 
Tdd em django sem desculpas versao final
Tdd em django sem desculpas versao finalTdd em django sem desculpas versao final
Tdd em django sem desculpas versao finalAdriano Petrich
 

Semelhante a Debugging Tips and Tricks (20)

Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Introdução ao JS1.pptx
Introdução ao JS1.pptxIntrodução ao JS1.pptx
Introdução ao JS1.pptx
 
Resumo Linguagem C
Resumo Linguagem CResumo Linguagem C
Resumo Linguagem C
 
Visualg
VisualgVisualg
Visualg
 
Vhdl
VhdlVhdl
Vhdl
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
Produtividade com Eclipse IDE
Produtividade com Eclipse IDEProdutividade com Eclipse IDE
Produtividade com Eclipse IDE
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valor
 
Jsummit 2014
Jsummit 2014Jsummit 2014
Jsummit 2014
 
TDC2013 Otimizando-C
TDC2013 Otimizando-CTDC2013 Otimizando-C
TDC2013 Otimizando-C
 
Aula2
Aula2Aula2
Aula2
 
Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Rails
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013
 
Ruby On Rails Regis
Ruby On Rails RegisRuby On Rails Regis
Ruby On Rails Regis
 
C#4 - Parte 1 - Dinamismo E Argumentos opcionais e nomeados
C#4 - Parte 1 - Dinamismo E Argumentos opcionais e nomeadosC#4 - Parte 1 - Dinamismo E Argumentos opcionais e nomeados
C#4 - Parte 1 - Dinamismo E Argumentos opcionais e nomeados
 
Prática da disciplina de laboratório de conversão de energia
Prática da disciplina de laboratório de conversão de energiaPrática da disciplina de laboratório de conversão de energia
Prática da disciplina de laboratório de conversão de energia
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
S2 b desenvolvimento de sistemas [reparado]
S2 b   desenvolvimento de sistemas [reparado]S2 b   desenvolvimento de sistemas [reparado]
S2 b desenvolvimento de sistemas [reparado]
 
Tdd em django sem desculpas versao final
Tdd em django sem desculpas versao finalTdd em django sem desculpas versao final
Tdd em django sem desculpas versao final
 
Introdução ao C#
Introdução ao C#Introdução ao C#
Introdução ao C#
 

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
 
Swift!.opcionais.oh!.my()?!?
Swift!.opcionais.oh!.my()?!?Swift!.opcionais.oh!.my()?!?
Swift!.opcionais.oh!.my()?!?Tales Andrade
 
Debugging fast track
Debugging fast trackDebugging fast track
Debugging fast trackTales 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
 
Swift!.opcionais.oh!.my()?!?
Swift!.opcionais.oh!.my()?!?Swift!.opcionais.oh!.my()?!?
Swift!.opcionais.oh!.my()?!?
 
Debugging fast track
Debugging fast trackDebugging fast track
Debugging fast track
 
Tales@tdc
Tales@tdcTales@tdc
Tales@tdc
 

Debugging Tips and Tricks

  • 1.
  • 3. Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it Brian Kernighan
  • 4. The first moral of the story is that program testing can be used very effectively to show the presence of bugs but never their absence Edsger W. Dijkstra
  • 5. Fundamentos • Breakpoint • Watchpoint • Debug Navigator • Editor Area • Continue to Here (gutter) • Debug bar • Show debug area (cmd + shift + y) • variable view • watch • console
  • 6. Fundamentos • Breakpoint • Watchpoint • Debug Navigator • Editor Area • Continue to Here (gutter) • Debug bar • Show debug area (cmd + shift + y) • variable view • watch • console • Frame
  • 7. Fundamentos • Debug bar • (des)ativar breakpoints • Continuar execução • Step over • Executa a linha azul e segue para próxima • Step in • “entra” no método chamado • Step out • “Sai” do método chamado
  • 8. Fundamentos • Debug bar • Debug View Hierarchy • Simulate Location • Choose stack frame
  • 9. Fundamentos • watchpoint • parece breakpoint • para na mudança de valor • Variável ou endereço de memória • view memory • breakpoint navigator • edit • condition • action • options (apenas uma)
  • 10. lldb - low level debugger • inicio • terminologia • personalizando comandos
  • 11. lldb - low level debugger • LLDB • next generation • high-performance debugger. • It is built as a set of reusable components which highly leverage existing libraries in the larger LLVM Project, such as the Clang expression parser and LLVM disassembler. • clang embutido • usa o compilador para parse das expressões
  • 12. lldb - low level debugger • Usando Breakpoint • Você já fez isso: NSLog(@“Log just for debug: [%@]", self.objects); • Ou isso? NSInteger n = 0; //[self someMethodThatReturnInteger]; • Ou isso? if (YES || [self someMethodThatReturnBool]) { • Ou isso? - (BOOL)someMethodThatReturnBool { return YES; //TODO: implement }
  • 13. lldb - breakpoints • Breakpoint para a execução em uma instrução • Permitem adicionar comandos apenas do debug • condições de parada • Via comando breakpoint set —file ViewController.swift —line 7 • Via Xcode - basta clicar no gutter
  • 14. lldb - comandos • Expression (expression) • Print (print / expression —) • parray • Print Object (po / expression -O —) • poarray • Watchpoint (watchpoint)
  • 15. Expressões • avaliam como código • resultado exibido e guardado em variável de conveniência ($1, $2, etc) • podem fazer muito • aritmetica • chamada de funções • type casting • atribuições • declaração de variáveis (tipo variável = valor ou tipo $variavel = valor)
  • 16. lldb - low level debugger - Symbolic Breakpoint
  • 17. lldb - low level debugger - Symbolic Breakpoint - Assinatura do método
  • 18. lldb - low level debugger - Symbolic Breakpoint - Assinatura do método - Simbolo
  • 19. lldb - low level debugger - Exception Breakpoint
  • 20. lldb - editando breakpoints
  • 21. lldb - condições de parada
  • 22. lldb - condições de parada • - [NSManagedObject setValue:forKey:]
  • 23. lldb - mais expressões • e count = 42 (NSUInteger) $4 = 42 • e NSMutableDictionary *$dict = [staticDict mutableCopy]; e $dict[@“key”] = @“newValue”; e staticDict = $dict;
  • 24. lldb - mais expressões (lldb) e char *$str = (char *)malloc(8) (lldb) e (void)strcpy($str, "munkeys") (lldb) e $str[1] = 'o' (char) $0 = 'o' (lldb) p $str (char *) $str = 0x00007fd04a900040 “monkeys" (lldb) x/4c $str 0x7fd04a900040: monk
  • 25. lldb - low level debugger - Watchpoint - Monitora estado/valor de variável - Inspetor de variáveis
  • 26. lldb - low level debugger - Watchpoint - Monitora estado/valor de variável - Inspetor de variáveis - Console - Permite editar wp e adicionar condição de parada - não aparece no Breakpoint Navigator
  • 27. lldb - low level debugger
  • 28. lldb - low level debugger • Rule of Thumb - keep it fast • “Automatically continue after evaluating” • po $arg1 • bt/bt all • Audible breakpoints • breakpoint com linha de comando • Command: say • Arguments: -v, Zarvox, “Your breakpoint %B has been hit %H times”
  • 29. Python + Chisel • ~/.lldbinit-Xcode • ~/.lldbinit • Aliases • default settings • type formatting • import python modules • bind python commands
  • 30. Chisel - alguns comandos úteis • (lldb) script import os (lldb) script os.system("open http://concretesolutions.com.br“) • Permite importar script python com command script import ~/myCommands.py
  • 31. Chisel - alguns comandos úteis • Chisel - Instalando: • brew update • brew install chisel • pviews - exibe hierarquia de view • pvc - exibe hierarquia de view controllers • visualize - abre Preview.app com conteúdo de UIImage, CGImageRef, UIView, CALayer • fv/fvc - busca view/view controller pelo nome de classe via regex • alamborder - adiciona borda em view com layout ambíguo • mwarning - simula memory warning
  • 32. Behaviors • debug navigator aparecendo - só alterar • console • variables view, etc
  • 33. Refereincias • http://www.slideshare.net/talesp/debugging-fast-track • https://github.com/facebook/chisel • https://www.objc.io/issues/19-debugging/lldb-debugging/#let-s-dance • http://lldb.llvm.org/tutorial.html • https://www.bignerdranch.com/blog/xcode-breakpoint-wizardry/
  • 34. www.concretesolutions.com.br blog.concretesolutions.com.br Rio de Janeiro – Rua São José, 90 – cj. 2121 Centro – (21) 2240-2030 São Paulo - Rua Sansão Alves dos Santos, 433 4º andar - Brooklin - (11) 4119-0449

Notas do Editor

  1. edit scheme - cmd+< build config (debug) executável (framework vs app) argumentos menu contextual na variable view
  2. edit scheme - cmd+< build config (debug) executável (framework vs app) argumentos menu contextual na variable view
  3. expr — xxx (po var)
  4. “tipo $variaval = valor” global expr —unwind-on-error=0 — (para no erro/exception)
  5. Simbolo - apenas durante execução
  6. Simbolo - apenas durante execução