Respostas:
Sim! Há um depurador Python chamado pdb
apenas para fazer isso!
Você pode iniciar um programa Python pdb
usando pdb myscript.py
ou python -m pdb myscript.py
.
Existem alguns comandos que você pode emitir, os quais estão documentados na pdb
página.
Alguns úteis para lembrar são:
b
: defina um ponto de interrupçãoc
: continue depurando até atingir um ponto de interrupçãos
: percorrer o códigon
: para ir para a próxima linha de códigol
: lista o código fonte do arquivo atual (padrão: 11 linhas, incluindo a linha que está sendo executada)u
: navegar para cima de um quadro de pilhad
: navegar para baixo em um quadro de pilhap
: para imprimir o valor de uma expressão no contexto atualSe você não deseja usar um depurador de linha de comando, alguns IDEs como Pydev , Wing IDE ou PyCharm possuem um depurador de GUI. Wing e PyCharm são produtos comerciais, mas o Wing possui uma edição "Pessoal" gratuita e o PyCharm tem uma edição comunitária gratuita.
pudb
é ótimo para isso. Tambémpydev
pdb
não é uma ferramenta de linha de comando. Para usá-lo, use python -m pdb your_script.py
.
pdb
comando faz parte do python
pacote. De qualquer forma, python -m <module>
está se tornando o padrão para outras coisas pip
, por isso é provavelmente melhor usá-lo por padrão.
O primeiro passo é fazer com que o interpretador Python entre no modo de depuração.
A. A partir da linha de comando
Maneira mais direta, a partir da linha de comando, do interpretador python
$ python -m pdb scriptName.py
> .../pdb_script.py(7)<module>()
-> """
(Pdb)
B. Dentro do intérprete
Ao desenvolver versões anteriores de módulos e experimentá-lo de forma mais iterativa.
$ python
Python 2.7 (r27:82508, Jul 3 2010, 21:12:11)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pdb_script
>>> import pdb
>>> pdb.run('pdb_script.MyObj(5).go()')
> <string>(1)<module>()
(Pdb)
C. De dentro do seu programa
Para um projeto grande e um módulo de execução demorada, é possível iniciar a depuração de dentro do programa usando import pdb e set_trace () assim:
#!/usr/bin/env python
# encoding: utf-8
#
import pdb
class MyObj(object):
count = 5
def __init__(self):
self.count= 9
def go(self):
for i in range(self.count):
pdb.set_trace()
print i
return
if __name__ == '__main__':
MyObj(5).go()
Depuração passo a passo para entrar em mais interno
Execute a próxima instrução… com “n” (próxima)
Repetindo o último comando de depuração ... com ENTER
Sair de tudo… com “q” (sair)
Imprimir o valor das variáveis… com “p” (imprimir)
a) pa
Desativando o prompt (Pdb)… com “c” (continuação)
Vendo onde você está… com “l” (lista)
Entrar em sub-rotinas… com “s” (entrar em)
Continuando ... mas até o final da sub-rotina atual ... com "r" (retorno)
Atribuir um novo valor
a) ! b = "B"
Definir um ponto de interrupção
a) quebrar o número da roupa
b) interromper nome da função
c) nome do arquivo de interrupção: roupa
Ponto de interrupção temporário
a) número de roupa de cama
Ponto de interrupção condicional
a) quebrar o número da roupa, condição
Nota: ** Todos esses comandos devem ser executados a partir de ** pdb
Para um conhecimento aprofundado, consulte: -
https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/
Existe um módulo chamado 'pdb' em python. Na parte superior do seu script python, você faz
import pdb
pdb.set_trace()
e você entrará no modo de depuração. Você pode usar 's' para avançar, 'n' para seguir a próxima linha semelhante ao que você faria com o depurador 'gdb'.
A partir do Python 3.7, você pode usar a breakpoint()
função interna para inserir o depurador:
foo()
breakpoint() # drop into the debugger at this point
bar()
Por padrão, breakpoint()
importará pdb
e ligará pdb.set_trace()
. No entanto, você pode controlar o comportamento de depuração via sys.breakpointhook()
e uso da variável de ambiente PYTHONBREAKPOINT
.
Veja PEP 553 para mais informações.
breakpoint
fiquei empolgado. Mas então eu aprendi que é essencialmente apenas um atalho para import pdb; pdb.set_trace()
e isso me deixou triste. Python devs: foco favor na melhoria PDB com o GDB básica características como linhas de contexto, histórico de comandos persistente e guia auto-completar :-)
O ipdb adiciona a funcionalidade IPython ao pdb, oferecendo as seguintes ENORME melhorias:
Assim como o pdg, o ipdb ainda está longe de ser perfeito e completamente rudimentar se comparado ao GDB, mas já é uma grande melhoria em relação ao pdb.
O uso é análogo pdb
, basta instalá-lo com:
python3 -m pip install --user ipdb
e adicione à linha da qual você deseja depurar:
__import__('ipdb').set_trace(context=21)
Você provavelmente deseja adicionar um atalho para isso no seu editor, por exemplo, para o Vim snipmate eu tenho:
snippet ipd
__import__('ipdb').set_trace(context=21)
para que eu possa digitar apenas ipd<tab>
e ele se expanda para o ponto de interrupção. Em seguida, é fácil removê-lo, dd
pois tudo está contido em uma única linha.
context=21
aumenta o número de linhas de contexto, conforme explicado em: Como posso fazer o ipdb mostrar mais linhas de contexto durante a depuração?
Como alternativa, você também pode depurar programas desde o início com:
ipdb3 main.py
mas você geralmente não quer fazer isso porque:
Ou, alternativamente, como no pdb bruto 3.2+, você pode definir alguns pontos de interrupção na linha de comando:
ipdb3 -c 'b 12' -c 'b myfunc' ~/test/a.py
embora -c c
esteja quebrado por algum motivo: https://github.com/gotcha/ipdb/issues/156
python -m module
A depuração foi solicitada em: Como depurar um módulo Python executado com python -m na linha de comando? e como o Python 3.7 pode ser feito com:
python -m pdb -m my_module
Recursos ausentes ausentes do pdb e do ipdb em comparação ao GDB:
aborrecimentos específicos do ipdb:
Testado no Ubuntu 16.04, ipdb == 0.11, Python 3.5.2.
Hoje existe um breakpoint()
método que substitui import pdb; pdb.set_trace()
.
Ele também possui vários novos recursos , como possíveis variáveis de ambiente.
Se você deseja um IDE com depurador integrado, tente o PyScripter .
https://wiki.python.org/moin/PythonDebuggingTools
pudb é um bom substituto para o pdb
O Python Tutor é um depurador on-line de etapa única destinado a iniciantes. Você pode inserir o código na página de edição e clicar em "Visualizar execução" para iniciar a execução.
Entre outras coisas, ele suporta:
No entanto, ele também não suporta muitas coisas , por exemplo:
io.StringIO
e em io.BytesIO
vez disso: demoTambém é possível percorrer e rastrear programaticamente o código python (e é fácil!). Consulte a documentação sys.settrace () para obter mais detalhes. Também aqui está um tutorial para você começar.
O Visual Studio com PTVS pode ser uma opção para você: http://www.hanselman.com/blog/OneOfMicrosoftsBestKeptSecretsPythonToolsForVisualStudioPTVS.aspx
PyCharm é um IDE para Python que inclui um depurador. Assista a este vídeo do YouTube para obter uma introdução sobre o uso do depurador do PyCharm para percorrer o código.
Tutorial do PyCharm - Depurar código python usando PyCharm
Nota: Não se destina a ser um endosso ou revisão. O PyCharm é um produto comercial que é necessário pagar, mas a empresa fornece uma licença gratuita para estudantes e professores, além de uma versão comunitária "leve", gratuita e de código aberto.