terça-feira, julho 25, 2006

Debugando Python com pdb

Programar sem alguma ferramenta para debug pode ser um grande sofrimento.

Poucas pessoas conhecem ou utilizam, mas o Python, possui um módulo de debug incorparado a biblioteca padrão, chamado pdb:

"The module pdb defines an interactive source code debugger for Python programs. It supports setting (conditional) breakpoints and single stepping at the source line level, inspection of stack frames, source code listing, and evaluation of arbitrary Python code in the context of any stack frame. It also supports post-mortem debugging and can be called under program control."

E para alegria de muitos programadores ele cumpre bem o que promete.

Uso básico:

import pdb; pdb.set_trace()

Quando a linha acima for executadao, o pdb toma conta da situação e seu prompt fica disponivel para que o programador possa debugar seu programa da maneria mais tradicional possivel, o 'set_trace' é um ponto de rastreamento ou captura que colocamos em nosso código.

-> Pdb().set_trace()
(Pdb)

Aqui fica intuitivo os comandos são simples 'n - next', 'c - continue' e assim por diante. Para mais detalhes 'help'.

O inconveniente deste processo é que temos que modificar nossos fontes para poder debugar, adicionando a linha de captura (chamada do metodo set_trace). O esquecimento desta linha no código por exemplo, pode fazer com que o programa fique travado.

Para evitar essas situações podemos utilizar o pdb pela linha de comando no estilo do gdb.

python -m pdb programa.py

Deste modo o prompt vai ser invocado e então podemos dizer em qual linha será colocado o break, ' b 10' por exemplo e depois 'c' para rodar até o break.

Infelizmente a opção '-m' só funciona no python 2.4, para versões mais antigas podemos executar o pdb diretamente da biblioteca informando o arquivo fonte como argumento, no meu caso:

python /usr/local/lib/python2.2/pdb.py main.py

Crie um link simbolico para o pdb e seja feliz.

Existe ainda uma versão do pdb extendida chamada pypdb, que me parece bastante interessante, mas também requer python >= 2.4.0. O pypdb funciona ainda mais na linha do gdb, até mesmo sendo um programa binário externo que invoca o código python a ser debugado.

Para informações mais completas:

O'Reillty - Interactive Debugging in Python
Debugando o Python
Using the Python debugger (pdb)

Um comentário:

Anônimo disse...
Este comentário foi removido por um administrador do blog.