Non è possibile utilizzare continue
perché le nuove istruzioni nel debugger devono essere complete e valide senza alcun altro contesto; continue
deve essere fornito all'interno di un loop di costruzione durante la compilazione. Pertanto, non è possibile utilizzare !continue
(con !
per impedire pdb
dall'interpretazione del comando) anche se il debugger sta elaborando un costrutto di loop.
È possibile utilizzare il comando j[ump]
, a patto di avere un tardi dichiarazione per saltare a. Se il ciclo è vuota dopo le dichiarazioni che volevi saltare sopra, si può solo 'riavvolgere':
$ bin/python test.py
> /.../test.py(5)<module>()
-> print(str(i))
(Pdb) l
1 import pdb
2
3 for i in range(10):
4 pdb.set_trace()
5 -> print(str(i))
6
[EOF]
(Pdb) j 3
> /.../test.py(3)<module>()
-> for i in range(10):
j 3
saltato alla linea 3, non tralasciando nulla; la riga 3 verrà rieseguita compreso l'impostazione di range()
. È possibile passare alla riga 4, ma il ciclo for
non avanza.
Dovresti aggiungere un'altra istruzione alla fine del ciclo da cui saltare per consentire a Python di continuare. Quella dichiarazione può essere un print()
o un pass
o qualsiasi altra cosa che non deve modificare il tuo stato. Potresti anche usare continue
come ultima dichiarazione. Ho usato i
:
for i in range(10):
pdb.set_trace()
print(str(i))
i # only here to jump to.
Demo:
$ bin/python test.py
> /.../test.py(5)<module>()
-> print(str(i))
(Pdb) l
1 import pdb
2
3 for i in range(10):
4 pdb.set_trace()
5 -> print(str(i))
6 i # only here to jump to.
7
[EOF]
(Pdb) j 6
> /.../test.py(6)<module>()
-> i # only here to jump to.
(Pdb) c
> /.../test.py(4)<module>()
-> pdb.set_trace()
(Pdb) s
> /.../test.py(5)<module>()
-> print(str(i))
(Pdb) j 6
> /.../test.py(6)<module>()
-> i # only here to jump to.
(Pdb) i
1
(Pdb) c
> /.../test.py(4)<module>()
-> pdb.set_trace()
(Pdb) s
> /.../test.py(5)<module>()
-> print(str(i))
(Pdb) j 6
> /.../test.py(6)<module>()
-> i # only here to jump to.
(Pdb) i
2
Da Debugger Commands:
j (UMP) lineno
Impostare la riga successiva che verrà eseguita. Disponibile solo nel frame più in basso. Ciò ti consente di tornare indietro ed eseguire nuovamente il codice o di saltare in avanti per saltare il codice che non vuoi eseguire.
Si noti che non tutti i salti sono consentiti, ad esempio non è possibile saltare nel mezzo di un ciclo for
o di una clausola finally
.
fonte
2015-02-09 16:41:00
Quindi, per essere chiari, si desidera che il codice si comporti come se fosse stata eseguita un'istruzione 'continue'? Non vuoi che 'str (i)' venga stampato per quel ciclo, giusto? – Kevin
Questo è corretto! – Andor
Per inciso, per il problema generale di "come faccio a fare una distinzione tra comandi pdb ed espressioni Python che assomigliano ai comandi pdb?", Puoi anteporre il prefisso a Python con un punto esclamativo. Ma questo non sembra funzionare per 'continue' in particolare. – Kevin