Como posso pular um loop usando pdb.set_trace()
?
Por exemplo,
pdb.set_trace()
for i in range(5):
print(i)
print('Done!')
pdb
prompts antes do loop. Eu insiro um comando. Todos os valores de 1 a 5 são retornados e eu gostaria de ser avisado pdb
novamente antes de ser print('Done!')
executado.
n
e digiteuntil
. Isso irá até que pelo menos a linha atual seja excedida.f
usado peladebug
função de R que "termina a execução do loop ou função atual" ( adv-r.hadley.nz/debugging.html )?until
(ou sua forma abreviadaunt
) sem argumentos sempre vai descer uma linha (a menos que você acesse uma instrução return), então você também pode usá-lo várias vezes em vez den
.breakpoint()
definido no loop inpython 3
. OVB Editor
pode aceitar pontos de interrupção 'dinamicamente', mas provavelmente não é o caso compdb
.Você deve definir um ponto de interrupção após o loop ("break main.py:4" presumindo que as linhas acima estão em um arquivo chamado main.py) e então continuar ("c").
fonte
No link mencionado pela resposta aceita ( https://pymotw.com/3/pdb/ ), achei esta seção um pouco mais útil:
Aqui está um exemplo de como isso pode funcionar re: loops:
Isso poupa você de duas coisas: ter que criar pontos de interrupção extras e navegar até o final de um loop (especialmente quando você já pode ter iterado de forma que não seria capaz de fazer sem executar novamente o depurador).
Aqui está a documentação do Python
until
. A propósito, estou usandopdb++
como um drop-in para o depurador padrão (daí a formatação), masuntil
funciona da mesma forma em ambos.fonte
Você pode definir outro ponto de interrupção após o loop e pular para ele (durante a depuração) com
c
:fonte
Se eu entendi isso corretamente.
Uma maneira possível de fazer isso seria:
Depois de receber o
pdb
prompt. Basta clicar emn
(próximo) 10 vezes para sair do loop.No entanto, não estou ciente de uma maneira de sair de um loop
pdb
.Você pode usar
r
para sair de uma função.fonte