Apenas uma questão de conveniência. Tenho sido um pouco mimado com depuradores em IDEs como Visual Studio e XCode. Acho um pouco desajeitado ter que digitar import pdb; pdb.set_trace()
para definir um ponto de interrupção (prefiro não importar o pdb no topo do arquivo, pois posso esquecê-lo e deixá-lo dentro).
Existe uma maneira mais simples de definir um ponto de interrupção no código Python, tão direto e discreto quanto o que você vê em um IDE?
python -m pdb <your_script>.py
entãob <line_number>
para definir o ponto de interrupção no número da linha escolhido (sem parênteses de função). Pressionec
para continuar até o seu ponto de interrupção. Você pode ver todos os seus pontos de interrupção usando ob
próprio comando. Digitehelp
para ver outros comandos pdb disponíveis durante a depuração.breakpoint()
função embutida. python.org/dev/peps/pep-0553Respostas:
Você pode executar seu programa a
pdb
partir da linha de comando, executandoEle vai quebrar na primeira linha, então você será capaz de adicionar um ponto de interrupção onde quiser em seu código usando o
break
comando, sua sintaxe é:É flexível o suficiente para permitir a adição de um ponto de interrupção em qualquer lugar.
fonte
pdb.set_trace()
entrar no depurador, usar ol
comando (lista) e ver que quero definir um ponto de interrupção na linha 27, eu inseriria:b 27
e o depurador definiria um ponto de interrupção na linha 27 (eu encontrei a documentação é um pouco difícil de entender, então queria adicionar esse ponto de esclarecimento).x
e quiser parar quando seu métodof
for chamado, pode dizerbreak x.f
, e entãoc(ontinue)
. Isso funciona mesmo se o objeto estiver em um arquivo inacessível ou foi criado dinamicamente, por exemplo, removendo-o.b /data/users/me/project/env/local/lib/python2.7/site-packages/django/core/urlresolvers.py:596
Você pode usar:
fonte
set_trace
apenas quando uso bp ()?No vim, tenho uma macro configurada para isso (no meu arquivo .vimrc):
então posso apenas pressionar \ b (quando não estiver no modo de inserção) e adicionar um ponto de interrupção após a linha atual, ou \ B (observe a maiúscula) e colocar um antes da linha atual.
o que parece funcionar bem. A maioria dos outros editores de programadores 'simples' (emacs, sublimetext, etc) devem ter maneiras fáceis semelhantes de fazer isso.
Editar: Na verdade, tenho:
que o ativa apenas para arquivos de origem python. Você pode facilmente adicionar linhas semelhantes para javascript ou qualquer outra linguagem que você use.
Atualização de 2019 (Python 3.7+)
Python 3.7+ agora tem o embutido
breakpoint()
que pode substituir o anteriorimport pdb; pdb.set_trace()
no vim. Ainda funciona da mesma forma.fonte
set autoindent
em seu arquivo .vimrc .set autoindent
(e um monte de outras opções) como padrão. Uma das primeiras coisas que faço com um novo sistema é obter um melhor vimrc ..."dyy
e sempre que precisar, faça"dp
ou"dP
. Aprenda os registros do vim ! Eles são muito úteis e sempre são suportados!qd
, mais tarde,"dp
para colar. Por fim, atribua suas instruções a um registro, sempre preenchido no vim loadup. Exemplo:let @d = 'oimport pdb; pdb.set_trace()k0:w'
Agora, basta usar@d
sempre que quiser colar a linha em um arquivo. O acima também salva o arquivo. Mas você terá que gravar o seu próprio (ao invés de copiar / colar acima), pois caracteres especiais estão envolvidos (para escape, etc).Se você não quiser definir pontos de interrupção manualmente toda vez que executar o programa (no Python 3.2+), por exemplo, diga que deseja criar diretamente um ponto de interrupção na linha 3 e parar a execução aí:
python -m pdb -c "b 3" -c c your_script.py
As seguintes informações podem ajudar:
fonte
Ainda não tentei, mas eles apenas implementaram um novo ponto de interrupção integrado chamado breakpoint () no Python 3.7, o que significa que agora você pode inserir um ponto de interrupção com uma instrução:
fonte
É assim que você usaria pdb na linha de comando sem implementar nada em seu código-fonte (a documentação e outros recursos online não fazem um bom trabalho explicando isso a um programador que usou apenas depuradores visuais no passado):
Inicie o pdb digitando o seguinte em um prompt de shell:
Este comando inicializa o pdb e o depurador pdb irá quebrar na primeira linha do seu python_script e esperar por uma entrada sua:
Esta é a interface para comunicação com o depurador. Agora, você pode especificar seus comandos aqui. Ao contrário do uso de botões ou atalhos de teclado em depuradores visuais, aqui você usará comandos para obter os mesmos resultados.
Você pode ir para a próxima linha em seu código pelo comando "n" (próximo):
Executar um próximo exibiria o número da linha e o código específico na fonte:
Você pode definir um ponto de interrupção especificando um número de linha em seu código-fonte.
Aqui, o depurador é definido para quebrar na linha 50. Se não houver nenhum outro ponto de interrupção, o ponto de interrupção na linha 50 será o primeiro e pode ser referenciado pelo id do ponto de interrupção que é 1 neste caso. Se você adicionar mais pontos de interrupção, eles obterão identificadores sequencialmente (ou seja, 2, 3 etc.)
Depois que um ponto de interrupção é definido, você deve continuar executando seu programa até que o pdb chegue ao ponto de interrupção da seguinte maneira:
Depois de chegar a um ponto de interrupção, você pode ir para a próxima linha, com o comando n conforme descrito anteriormente. Se quiser examinar os valores das variáveis, execute o comando de parâmetro da seguinte maneira:
Se você não precisa mais de um ponto de interrupção, pode limpá-lo passando a id do ponto de interrupção com o comando limpar:
Finalmente, quando terminar de usar o depurador, você pode sair da execução da mesma forma que sairia do interpretador de linha de comando python.
Espero que isso ajude alguém a começar a usar PDB. Aqui está uma lista de comandos que você pode usar com o depurador: pdb so question and answers
fonte
Python
3.7
tem uma nova maneira embutida de definir pontos de interrupção. ChamandoMais aqui https://stackoverflow.com/a/53263117/6488361
fonte
Você pode usar um IDE que suporte depuração python, ou você pode verificar a excelente ferramenta Winpdb. Que funciona em qualquer plataforma e fornece recursos de depuração gráfica para seu script Python.
http://winpdb.org/
fonte
Você pode usar:
Todos os itens acima oferecem suporte à depuração Python de dentro de um IDE.
fonte
No Atom, se os plug-ins Python estiverem instalados, você pode apenas digitar '
pdb
' e pressionar enter e o snippet digitará importar e rastrear de volta para você.Eu acostumei com isso agora que às vezes eu apenas digito mesmo se eu estiver editando no vim e esperando o menu suspenso aparecer.
fonte
Um método subestimado é definir o ponto de interrupção no pdb diretamente:
irá definir um ponto de interrupção em
site-packages\torch\__init__.py:10
Então
pdb> c
vai parar neste ponto de interrupção.A seguir também são válidos:
Veja doc para detalhes.
fonte
Você pode usar o Vim com o plugin Python-Mode ou Emacs com o plugin Elpy .
Esses plug-ins fornecem pontos de interrupção com pressionamentos de tecla fáceis (
\ b
no Vim eC-c C-u b
no Emacs) além de muitos outros recursos de IDEs pesados (dobramento de código, refatoração, linting, etc.) - tudo dentro de um editor de texto baseado em terminal leve.fonte
A maneira mais simples de executar o depurador em seu script é apenas
Executar pdb em uma linha de comando do Linux dá
fonte
pdb
? Ou de onde?