Continuando o post anterior[1], além do pdb[2] que é totalmente via linha de comando, há o winpdb[3] que possui uma interface gráfica para facilitar a depuração.
Instalá-lo é muito fácil, se você possui easy_install é só executar:
sudo easy_install winpdb
Se você não tem easy_install, mas tem apt-get:
sudo apt-get install winpdb
Se você não tem nada disso ainda dá pra baixar pelo site[3] e funciona no Windows também, mas eu não testei.
Usarei como exemplo o código criado pelo post anterior, é um projeto bem simples com apenas uma view para atestar o poder do debug.
Lembra da nossa view, ela é simples assim:
def hello(request):
a = 2
b = 3
c = [1,2,3]
c.pop()
d = soma(3,4)
response = HttpResponse("Hello World")
return response
Como o winpdb possui a funcionalidade de adicionar breakpoints eu tirei aquele código de debug do pdb senão eles conflitariam entre si.
Abra o winpdb:
A interface dele é bem simples, ficará mais clara quando estivermos executando alguma coisa.
Vá até File->Launch e na janela aberta escolha o manage.py do projeto que vamos depurar, por fim adicione runserver --noreload no comando e então clique em OK para iniciar o servidor.
O seu winpdb deve ficar parecido com a imagem abaixo, além de um terminal que será aberto pelo próprio winpdb.
Antes de continuar qualquer coisa, vá até File->Open Source e na janela aberta escolha o arquivo views.py, adicione um breakpoint na linha a = 2 clicando à direita do número da linha. Tente acessar a URL que executa a view hello e volte ao winpdb, você verá algo como abaixo (a diferença é que eu já andei duas linhas no código):
Essa imagem é bem interessante pois mostra valores das variáveis, um console escondido abaixo do código, o arquivo em que o debugger se encontra, controles de avanço do debug, etc.
Avance com Control->Next até a chamada de soma e entre com Control->Step Into, avance duas linhas e você ficará assim:
As variáveis do escopo local mudaram, o debugger continua no views.py mas agora dentro da função soma, dê Control->Return para ir até antes da função retornar pro escopo de hello.
Com Control->Next vá até antes da linha que executa return response e vamos brincar um pouco com o console que se encontra abaixo do código-fonte:
Como você pode ver na imagem, o comando v (de eval) seguido de uma expressão retorna o valor da expressão, já o comando x (de exec) seguido de uma expressão executa a expressão informada.
Vamos fazer igual ao post anterior e verificar as propriedades de response:
Na imagem acima, executamos um dir na variável response, exibimos seu content com v, alteramos o content com x e por fim com Control->Go visualizamos o resultado no navegador:
Para saber de mais funcionalidades que o winpdb pode te oferecer dê uma olhada no tutorial[4] (bem completo por sinal) que se encontra na própria wiki[5] deles.
[1] – http://blog.danilocabello.com/arquivo/debugando-no-django/ [2] – http://docs.python.org/library/pdb.html [3] – http://winpdb.org/ [4] – http://winpdb.org/cgi-bin/moin.cgi/WinpdbTutorial [5] – http://winpdb.org/cgi-bin/moin.cgi/FrontPage







Cara, valeu mesmo !
Muito fácil debugar um Django assim !
Pingback: Como fazer um “debug” em aplicações Django « Programando Python no RS