Em Java / C #, você pode facilmente percorrer o código para rastrear o que pode estar errado, e os IDE tornam esse processo muito amigável.
Você pode rastrear o código python de maneira semelhante?
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, usepython -m pdb your_script.py
.pdb
comando faz parte dopython
pacote. De qualquer forma,python -m <module>
está se tornando o padrão para outras coisaspip
, por isso é provavelmente melhor usá-lo por padrão.Usando o depurador interativo Python 'pdb'
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
B. Dentro do intérprete
Ao desenvolver versões anteriores de módulos e experimentá-lo de forma mais iterativa.
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:
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://pymotw.com/2/pdb/
https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/
fonte
Existe um módulo chamado 'pdb' em python. Na parte superior do seu script python, você faz
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'.
fonte
A partir do Python 3.7, você pode usar a
breakpoint()
função interna para inserir o depurador:Por padrão,
breakpoint()
importarápdb
e ligarápdb.set_trace()
. No entanto, você pode controlar o comportamento de depuração viasys.breakpointhook()
e uso da variável de ambientePYTHONBREAKPOINT
.Veja PEP 553 para mais informações.
fonte
breakpoint
fiquei empolgado. Mas então eu aprendi que é essencialmente apenas um atalho paraimport 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 :-)ipdb (depurador IPython)
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:e adicione à linha da qual você deseja depurar:
Você provavelmente deseja adicionar um atalho para isso no seu editor, por exemplo, para o Vim snipmate eu tenho:
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:
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:
embora
-c c
esteja quebrado por algum motivo: https://github.com/gotcha/ipdb/issues/156python -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: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.
fonte
Hoje existe um
breakpoint()
método que substituiimport pdb; pdb.set_trace()
.Ele também possui vários novos recursos , como possíveis variáveis de ambiente.
fonte
Se você vem de Java / C # background, acho que sua melhor aposta seria usar o Eclipse com Pydev . Isso fornece um IDE totalmente funcional com o depurador incorporado. Eu também o uso com o django.
fonte
Se você deseja um IDE com depurador integrado, tente o PyScripter .
fonte
https://wiki.python.org/moin/PythonDebuggingTools
pudb é um bom substituto para o pdb
fonte
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 emio.BytesIO
vez disso: demofonte
També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.
fonte
O Visual Studio com PTVS pode ser uma opção para você: http://www.hanselman.com/blog/OneOfMicrosoftsBestKeptSecretsPythonToolsForVisualStudioPTVS.aspx
fonte
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.
fonte