SlideShare a Scribd company logo
1 of 38
Download to read offline
O Depurador Onisciente
Rodrigo Dias Arruda Senra
PythonNordeste 2013 / Fortaleza-CE
O Depurador Onisciente
Rodrigo Dias Arruda Senra
PythonNordeste 2013 / Fortaleza-CE
Apenas um rapaz latino americano...
•Especialista em Desenv. e Proj. de SW
Globo.com
•Engenheiro de Computação
Grad-MSc-PhD IC-Unicamp
•Entusiasta de FLOSS
(atuante na comunidade Python desde 2000)
Roteiro do Blá
O que é um bug ?
Debugging is twice as hard
as writing the code in the first
place. Therefore,
if you write the code as cleverly
as possible...
Brian Kernighan
you are, by definition,
not smart enough to debug it.
Brian Kernighan
“In a typical commercial development
organization, the cost of providing this assurance
via appropriate debugging, verification and testing
activities can easily range from 50% to 75% of the
total development cost.”
Brent Hailpern and Padmanabhan Santhanam.
Software debugging, testing, and verification.
IBM Systems Journal, 41(1):4–12, 2002
Conceitos Básicos
def soma(x, y):
z = x + y
return z
Timeline
ic=15 ic=16
soma(2,3)
soma
step
Conceitos Básicos
>>> dis.disassemble(soma.func_code)
2 0 LOAD_FAST 0 (x)
3 LOAD_FAST 1 (y)
6 BINARY_ADD
7 STORE_FAST 2 (z)
3 10 LOAD_FAST 2 (z)
13 RETURN_VALUE
def soma(x, y):
z = x + y
return z
ic=15
ic=16
ic=15
ic=16
Timeline
ic=15 ic=16
soma(2,3)
soma
ic=14
step
Conceitos Básicos
>>> dis.disassemble(soma.func_code)
2 0 LOAD_FAST 0 (x)
3 LOAD_FAST 1 (y)
6 BINARY_ADD
7 STORE_FAST 2 (z)
3 10 LOAD_FAST 2 (z)
13 RETURN_VALUE
def soma(x, y):
z = x + y
return z
Timeline
ic=15
soma(2,3)
ic=14
next
Ferramentas de
Depuração
Ferramentas de
Depuração
biblioteca-padrão
• logging
• traceback
• inspect
• dis
• bdb
• pdb
• idle
Ferramentas de
Depuração
biblioteca-padrão
• logging
• traceback
• inspect
• dis
• bdb
• pdb
• idle
Depuradores (linha de comando)
• pydb - Rock Bernstein (2006)
• pydbgr/trepan - Rock Bernstein (2009)
• ipdb - Godefoide Chapelle (2010)
• epdb/gepdb - Patrick Sabin (2010)
• pudb - Andreas Kloeckner (2013)
Post-mortem ?
• EXDAMS (1969) - Bob Balzer [PL/I,Algol, Fortran]
• ? (1993) - A.Tolmach & A.Appel [Standard ML]
• ZStep95 (1997) - H. Lieberman [Lisp]
• Coca (1999) - M. Ducassé [C]
• Hercule (2000) - K. Renaud [Java]
• Dejavu (2000) - Alpern & Ngo & Choi & Sridaharan[Java]
• ODB (2005) - Bill Lewis [Java]
•TOD (2007) - Guillaume Pothier, Éric Tanter and José Piquer [Java]
• epdb (2010) - Patrick Sabin [Python]
História do Depurador Onisciente
Timeline 1
soma(2,3)
next
O que é o Depurador Onisciente ?
Timeline 1
soma(2,3)
next
O que é o Depurador Onisciente ?
Timeline 2
rnext
Timeline 1
soma(2,3)
next
O que é o Depurador Onisciente ?
Timeline 2
rnext soma
step
Timeline 1
soma(2,3)
next
O que é o Depurador Onisciente ?
Timeline 2
rnext soma
step
Modo: redo ou replay ?
Arquitetura (TOD)
http://pleiad.dcc.uchile.cl/tod/documentation/internals.html
http://www.lambdacs.com/debugger/
http://www.youtube.com/watch?v=xpI8hIgOyko
ODB
Implementing a Reversible Debugger for Python (epdb)
Patrick Sabin - Informatik der Technischen Universität Wien - 2010
http://github.com/rodsenra/pode
PODE
An now
something
completely
different !
Rodrigo Dias Arruda Senra
http://rodrigo.senra.nom.br
rsenra@acm.org
rodrigo.senra@corp.globo.com
As opiniões e conclusões expressas nesta apresentação são de exclusiva responsabilidade de Rodrigo Senra.
Não é necessário requisitar permissão do autor para o uso de partes ou do todo desta apresentação, desde que
não sejam feitas alterações no conteúdo reutilizado e que esta nota esteja presente na íntegra no material
resultante.
Imagens e referências para outros trabalhos nesta apresentação permanecem propriedade daqueles que detêm
seus direitos de copyright.
Obrigado a todos pela atenção.
Rodrigo Dias Arruda Senra
http://rodrigo.senra.nom.br
rsenra@acm.org
rodrigo.senra@corp.globo.com
As opiniões e conclusões expressas nesta apresentação são de exclusiva responsabilidade de Rodrigo Senra.
Não é necessário requisitar permissão do autor para o uso de partes ou do todo desta apresentação, desde que
não sejam feitas alterações no conteúdo reutilizado e que esta nota esteja presente na íntegra no material
resultante.
Imagens e referências para outros trabalhos nesta apresentação permanecem propriedade daqueles que detêm
seus direitos de copyright.

More Related Content

What's hot

Cases de Python no 7Masters 2012
Cases de Python no 7Masters 2012Cases de Python no 7Masters 2012
Cases de Python no 7Masters 2012Rodrigo Senra
 
Linguagem de Programação
Linguagem de ProgramaçãoLinguagem de Programação
Linguagem de Programaçãomoiplabs
 
Porque python é legal! d
Porque python é legal!  dPorque python é legal!  d
Porque python é legal! dJoelmir Ribacki
 
Python e tipagem estática
Python e tipagem estáticaPython e tipagem estática
Python e tipagem estáticaVinta Software
 
Arduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojoArduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojoLuciano Ramalho
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do GoogleLuciano Ramalho
 

What's hot (6)

Cases de Python no 7Masters 2012
Cases de Python no 7Masters 2012Cases de Python no 7Masters 2012
Cases de Python no 7Masters 2012
 
Linguagem de Programação
Linguagem de ProgramaçãoLinguagem de Programação
Linguagem de Programação
 
Porque python é legal! d
Porque python é legal!  dPorque python é legal!  d
Porque python é legal! d
 
Python e tipagem estática
Python e tipagem estáticaPython e tipagem estática
Python e tipagem estática
 
Arduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojoArduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojo
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do Google
 

Viewers also liked

Organicer: Organizando informação com Python
Organicer: Organizando informação com PythonOrganicer: Organizando informação com Python
Organicer: Organizando informação com PythonRodrigo Senra
 
Linked data at globo.com
Linked data at globo.comLinked data at globo.com
Linked data at globo.comRodrigo Senra
 
Tech talk about iswc2013
Tech talk about iswc2013Tech talk about iswc2013
Tech talk about iswc2013Rodrigo Senra
 
Uma breve história no tempo...da computação
Uma breve história no tempo...da computaçãoUma breve história no tempo...da computação
Uma breve história no tempo...da computaçãoRodrigo Senra
 
Rest - Representational State Transfer (EMC BRDC Internal Tech talk)
Rest - Representational State Transfer (EMC BRDC Internal Tech talk)Rest - Representational State Transfer (EMC BRDC Internal Tech talk)
Rest - Representational State Transfer (EMC BRDC Internal Tech talk)Rodrigo Senra
 
Brainiak - uma API REST Hipermedia
Brainiak - uma API REST Hipermedia Brainiak - uma API REST Hipermedia
Brainiak - uma API REST Hipermedia Rodrigo Senra
 
Rest, Gateway e Compiladores
Rest, Gateway e CompiladoresRest, Gateway e Compiladores
Rest, Gateway e CompiladoresRodrigo Senra
 
pa-pe-pi-po-pure Python Text Processing
pa-pe-pi-po-pure Python Text Processingpa-pe-pi-po-pure Python Text Processing
pa-pe-pi-po-pure Python Text ProcessingRodrigo Senra
 
Python Brasil 2010 - Potter vs Voldemort - Lições ofidiglotas da prática Pyth...
Python Brasil 2010 - Potter vs Voldemort - Lições ofidiglotas da prática Pyth...Python Brasil 2010 - Potter vs Voldemort - Lições ofidiglotas da prática Pyth...
Python Brasil 2010 - Potter vs Voldemort - Lições ofidiglotas da prática Pyth...Rodrigo Senra
 

Viewers also liked (9)

Organicer: Organizando informação com Python
Organicer: Organizando informação com PythonOrganicer: Organizando informação com Python
Organicer: Organizando informação com Python
 
Linked data at globo.com
Linked data at globo.comLinked data at globo.com
Linked data at globo.com
 
Tech talk about iswc2013
Tech talk about iswc2013Tech talk about iswc2013
Tech talk about iswc2013
 
Uma breve história no tempo...da computação
Uma breve história no tempo...da computaçãoUma breve história no tempo...da computação
Uma breve história no tempo...da computação
 
Rest - Representational State Transfer (EMC BRDC Internal Tech talk)
Rest - Representational State Transfer (EMC BRDC Internal Tech talk)Rest - Representational State Transfer (EMC BRDC Internal Tech talk)
Rest - Representational State Transfer (EMC BRDC Internal Tech talk)
 
Brainiak - uma API REST Hipermedia
Brainiak - uma API REST Hipermedia Brainiak - uma API REST Hipermedia
Brainiak - uma API REST Hipermedia
 
Rest, Gateway e Compiladores
Rest, Gateway e CompiladoresRest, Gateway e Compiladores
Rest, Gateway e Compiladores
 
pa-pe-pi-po-pure Python Text Processing
pa-pe-pi-po-pure Python Text Processingpa-pe-pi-po-pure Python Text Processing
pa-pe-pi-po-pure Python Text Processing
 
Python Brasil 2010 - Potter vs Voldemort - Lições ofidiglotas da prática Pyth...
Python Brasil 2010 - Potter vs Voldemort - Lições ofidiglotas da prática Pyth...Python Brasil 2010 - Potter vs Voldemort - Lições ofidiglotas da prática Pyth...
Python Brasil 2010 - Potter vs Voldemort - Lições ofidiglotas da prática Pyth...
 

Similar to Depurador Onisciente: conceitos e ferramentas

#noOps?? Transcendendo o DevOps pelo caminho de tijolos (não muito) amarelos
#noOps?? Transcendendo o DevOps pelo caminho de tijolos (não muito) amarelos#noOps?? Transcendendo o DevOps pelo caminho de tijolos (não muito) amarelos
#noOps?? Transcendendo o DevOps pelo caminho de tijolos (não muito) amarelosEvandro Silvestre
 
Codacy, CodeClimate, Sonarqube @ 5º DevOps Inside RJ
Codacy, CodeClimate, Sonarqube @ 5º DevOps Inside RJCodacy, CodeClimate, Sonarqube @ 5º DevOps Inside RJ
Codacy, CodeClimate, Sonarqube @ 5º DevOps Inside RJThiago Barradas
 
O ciclo da vida
O ciclo da vidaO ciclo da vida
O ciclo da vidaLuiz Borba
 
Campus Party Brasil 2010 - ALM - Application Lifecycle Management
Campus Party Brasil 2010 - ALM - Application Lifecycle ManagementCampus Party Brasil 2010 - ALM - Application Lifecycle Management
Campus Party Brasil 2010 - ALM - Application Lifecycle ManagementRamon Durães
 
Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012Leandro Silva
 
Dividindo para conquistar: microservicos com o jeitinho .NET
Dividindo para conquistar: microservicos com o jeitinho .NETDividindo para conquistar: microservicos com o jeitinho .NET
Dividindo para conquistar: microservicos com o jeitinho .NETtdc-globalcode
 
Introdução a DevOps e Continuous delivery agileday
Introdução a DevOps e Continuous delivery   agiledayIntrodução a DevOps e Continuous delivery   agileday
Introdução a DevOps e Continuous delivery agiledayCarlos Felippe Cardoso
 
Coding Dojo - Aplicando Princípios Ágeis
Coding Dojo - Aplicando Princípios ÁgeisCoding Dojo - Aplicando Princípios Ágeis
Coding Dojo - Aplicando Princípios ÁgeisLorival Smolski Chapuis
 
Como desenvolver softwares utilizando tecnologias microsoft
Como desenvolver softwares utilizando tecnologias microsoftComo desenvolver softwares utilizando tecnologias microsoft
Como desenvolver softwares utilizando tecnologias microsoftJucinei Pereira Dos Santos
 
QCon Rio - Mudando o foco: de processos para pessoas
QCon Rio - Mudando o foco: de processos para pessoasQCon Rio - Mudando o foco: de processos para pessoas
QCon Rio - Mudando o foco: de processos para pessoasIgor Macaubas
 
QConSP: Vivenciando dev ops para além da automação de infraestrutura
QConSP: Vivenciando dev ops para além da automação de infraestruturaQConSP: Vivenciando dev ops para além da automação de infraestrutura
QConSP: Vivenciando dev ops para além da automação de infraestruturaDiego Pacheco
 
Apresentação Meetup Faccilita Corretor Google Brasil - 01/03/2016
Apresentação Meetup Faccilita Corretor Google Brasil - 01/03/2016Apresentação Meetup Faccilita Corretor Google Brasil - 01/03/2016
Apresentação Meetup Faccilita Corretor Google Brasil - 01/03/2016Leonardo Turbiani
 
ASP NET CORE DOCKER LINUX AZURE
ASP NET CORE DOCKER LINUX AZUREASP NET CORE DOCKER LINUX AZURE
ASP NET CORE DOCKER LINUX AZUREIvan Martinez
 
Testes de Software - Módulo 1
Testes de Software - Módulo 1Testes de Software - Módulo 1
Testes de Software - Módulo 1Rodrigo Paes
 
5º ck o java e o android no iot
5º ck o java e o android no iot5º ck o java e o android no iot
5º ck o java e o android no iotHeider Lopes
 

Similar to Depurador Onisciente: conceitos e ferramentas (20)

Mergulhando no ecossistema .NET
Mergulhando no ecossistema .NETMergulhando no ecossistema .NET
Mergulhando no ecossistema .NET
 
#noOps?? Transcendendo o DevOps pelo caminho de tijolos (não muito) amarelos
#noOps?? Transcendendo o DevOps pelo caminho de tijolos (não muito) amarelos#noOps?? Transcendendo o DevOps pelo caminho de tijolos (não muito) amarelos
#noOps?? Transcendendo o DevOps pelo caminho de tijolos (não muito) amarelos
 
Codacy, CodeClimate, Sonarqube @ 5º DevOps Inside RJ
Codacy, CodeClimate, Sonarqube @ 5º DevOps Inside RJCodacy, CodeClimate, Sonarqube @ 5º DevOps Inside RJ
Codacy, CodeClimate, Sonarqube @ 5º DevOps Inside RJ
 
O ciclo da vida
O ciclo da vidaO ciclo da vida
O ciclo da vida
 
Campus Party Brasil 2010 - ALM - Application Lifecycle Management
Campus Party Brasil 2010 - ALM - Application Lifecycle ManagementCampus Party Brasil 2010 - ALM - Application Lifecycle Management
Campus Party Brasil 2010 - ALM - Application Lifecycle Management
 
Dismistificando deep learning v2.1
Dismistificando deep learning v2.1Dismistificando deep learning v2.1
Dismistificando deep learning v2.1
 
[qCon Rio 2015] Arquitetura Incremental
[qCon Rio 2015] Arquitetura Incremental[qCon Rio 2015] Arquitetura Incremental
[qCon Rio 2015] Arquitetura Incremental
 
Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012
 
Dividindo para conquistar: microservicos com o jeitinho .NET
Dividindo para conquistar: microservicos com o jeitinho .NETDividindo para conquistar: microservicos com o jeitinho .NET
Dividindo para conquistar: microservicos com o jeitinho .NET
 
Introdução a DevOps e Continuous delivery agileday
Introdução a DevOps e Continuous delivery   agiledayIntrodução a DevOps e Continuous delivery   agileday
Introdução a DevOps e Continuous delivery agileday
 
Como desenvolver-software
Como desenvolver-softwareComo desenvolver-software
Como desenvolver-software
 
Coding Dojo - Aplicando Princípios Ágeis
Coding Dojo - Aplicando Princípios ÁgeisCoding Dojo - Aplicando Princípios Ágeis
Coding Dojo - Aplicando Princípios Ágeis
 
Como desenvolver softwares utilizando tecnologias microsoft
Como desenvolver softwares utilizando tecnologias microsoftComo desenvolver softwares utilizando tecnologias microsoft
Como desenvolver softwares utilizando tecnologias microsoft
 
QCon Rio - Mudando o foco: de processos para pessoas
QCon Rio - Mudando o foco: de processos para pessoasQCon Rio - Mudando o foco: de processos para pessoas
QCon Rio - Mudando o foco: de processos para pessoas
 
QConSP: Vivenciando dev ops para além da automação de infraestrutura
QConSP: Vivenciando dev ops para além da automação de infraestruturaQConSP: Vivenciando dev ops para além da automação de infraestrutura
QConSP: Vivenciando dev ops para além da automação de infraestrutura
 
PHP Tools for Fast coding
PHP Tools for Fast codingPHP Tools for Fast coding
PHP Tools for Fast coding
 
Apresentação Meetup Faccilita Corretor Google Brasil - 01/03/2016
Apresentação Meetup Faccilita Corretor Google Brasil - 01/03/2016Apresentação Meetup Faccilita Corretor Google Brasil - 01/03/2016
Apresentação Meetup Faccilita Corretor Google Brasil - 01/03/2016
 
ASP NET CORE DOCKER LINUX AZURE
ASP NET CORE DOCKER LINUX AZUREASP NET CORE DOCKER LINUX AZURE
ASP NET CORE DOCKER LINUX AZURE
 
Testes de Software - Módulo 1
Testes de Software - Módulo 1Testes de Software - Módulo 1
Testes de Software - Módulo 1
 
5º ck o java e o android no iot
5º ck o java e o android no iot5º ck o java e o android no iot
5º ck o java e o android no iot
 

Depurador Onisciente: conceitos e ferramentas

  • 1. O Depurador Onisciente Rodrigo Dias Arruda Senra PythonNordeste 2013 / Fortaleza-CE
  • 2. O Depurador Onisciente Rodrigo Dias Arruda Senra PythonNordeste 2013 / Fortaleza-CE
  • 3. Apenas um rapaz latino americano... •Especialista em Desenv. e Proj. de SW Globo.com •Engenheiro de Computação Grad-MSc-PhD IC-Unicamp •Entusiasta de FLOSS (atuante na comunidade Python desde 2000)
  • 5.
  • 6.
  • 7.
  • 8.
  • 9. O que é um bug ?
  • 10. Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible... Brian Kernighan
  • 11. you are, by definition, not smart enough to debug it. Brian Kernighan
  • 12. “In a typical commercial development organization, the cost of providing this assurance via appropriate debugging, verification and testing activities can easily range from 50% to 75% of the total development cost.” Brent Hailpern and Padmanabhan Santhanam. Software debugging, testing, and verification. IBM Systems Journal, 41(1):4–12, 2002
  • 13. Conceitos Básicos def soma(x, y): z = x + y return z Timeline ic=15 ic=16 soma(2,3) soma step
  • 14. Conceitos Básicos >>> dis.disassemble(soma.func_code) 2 0 LOAD_FAST 0 (x) 3 LOAD_FAST 1 (y) 6 BINARY_ADD 7 STORE_FAST 2 (z) 3 10 LOAD_FAST 2 (z) 13 RETURN_VALUE def soma(x, y): z = x + y return z ic=15 ic=16 ic=15 ic=16 Timeline ic=15 ic=16 soma(2,3) soma ic=14 step
  • 15. Conceitos Básicos >>> dis.disassemble(soma.func_code) 2 0 LOAD_FAST 0 (x) 3 LOAD_FAST 1 (y) 6 BINARY_ADD 7 STORE_FAST 2 (z) 3 10 LOAD_FAST 2 (z) 13 RETURN_VALUE def soma(x, y): z = x + y return z Timeline ic=15 soma(2,3) ic=14 next
  • 16.
  • 18. Ferramentas de Depuração biblioteca-padrão • logging • traceback • inspect • dis • bdb • pdb • idle
  • 19. Ferramentas de Depuração biblioteca-padrão • logging • traceback • inspect • dis • bdb • pdb • idle Depuradores (linha de comando) • pydb - Rock Bernstein (2006) • pydbgr/trepan - Rock Bernstein (2009) • ipdb - Godefoide Chapelle (2010) • epdb/gepdb - Patrick Sabin (2010) • pudb - Andreas Kloeckner (2013)
  • 20.
  • 21.
  • 23.
  • 24. • EXDAMS (1969) - Bob Balzer [PL/I,Algol, Fortran] • ? (1993) - A.Tolmach & A.Appel [Standard ML] • ZStep95 (1997) - H. Lieberman [Lisp] • Coca (1999) - M. Ducassé [C] • Hercule (2000) - K. Renaud [Java] • Dejavu (2000) - Alpern & Ngo & Choi & Sridaharan[Java] • ODB (2005) - Bill Lewis [Java] •TOD (2007) - Guillaume Pothier, Éric Tanter and José Piquer [Java] • epdb (2010) - Patrick Sabin [Python] História do Depurador Onisciente
  • 25. Timeline 1 soma(2,3) next O que é o Depurador Onisciente ?
  • 26. Timeline 1 soma(2,3) next O que é o Depurador Onisciente ? Timeline 2 rnext
  • 27. Timeline 1 soma(2,3) next O que é o Depurador Onisciente ? Timeline 2 rnext soma step
  • 28. Timeline 1 soma(2,3) next O que é o Depurador Onisciente ? Timeline 2 rnext soma step Modo: redo ou replay ?
  • 30.
  • 32. Implementing a Reversible Debugger for Python (epdb) Patrick Sabin - Informatik der Technischen Universität Wien - 2010
  • 34.
  • 36.
  • 37. Rodrigo Dias Arruda Senra http://rodrigo.senra.nom.br rsenra@acm.org rodrigo.senra@corp.globo.com As opiniões e conclusões expressas nesta apresentação são de exclusiva responsabilidade de Rodrigo Senra. Não é necessário requisitar permissão do autor para o uso de partes ou do todo desta apresentação, desde que não sejam feitas alterações no conteúdo reutilizado e que esta nota esteja presente na íntegra no material resultante. Imagens e referências para outros trabalhos nesta apresentação permanecem propriedade daqueles que detêm seus direitos de copyright.
  • 38. Obrigado a todos pela atenção. Rodrigo Dias Arruda Senra http://rodrigo.senra.nom.br rsenra@acm.org rodrigo.senra@corp.globo.com As opiniões e conclusões expressas nesta apresentação são de exclusiva responsabilidade de Rodrigo Senra. Não é necessário requisitar permissão do autor para o uso de partes ou do todo desta apresentação, desde que não sejam feitas alterações no conteúdo reutilizado e que esta nota esteja presente na íntegra no material resultante. Imagens e referências para outros trabalhos nesta apresentação permanecem propriedade daqueles que detêm seus direitos de copyright.