Sie können continue
nicht verwenden, da neue Anweisungen im Debugger complete und ohne anderen Kontext gültig sein müssen; continue
muss in einem Loop-Konstrukt bei der Erstellung gegeben werden. Daher kann !continue
(mit der !
, um pdb
von der Interpretation des Befehls zu verhindern) nicht verwendet werden, auch wenn der Debugger ein Schleifenkonstrukt verarbeitet.
Sie können den j[ump]
Befehl, vorausgesetzt, Sie haben eine später Anweisung zu springen. Wenn Ihre Schleife leer ist, nachdem die Anweisungen, die Sie wollte überspringen, können Sie nur ‚zurückspulen‘:
$ 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
sprang 3 Zeile, nichts Skipping; Zeile 3 wird erneut ausgeführt, einschließlich der Einrichtung der range()
. Sie könnten zu Zeile 4 springen, aber dann wird die for
Schleife nicht weitergeschaltet.
Sie müssten am Ende der Schleife eine weitere Anweisung hinzufügen, um zu Python zu springen, um von dort fortzufahren. Diese Aussage kann ein print()
oder ein pass
oder irgendetwas anderes sein, das Ihren Zustand nicht ändern muss. Sie könnten sogar continue
als letzte Anweisung verwenden. Früher habe ich 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
Von Debugger Commands:
j (UMP) lineno
die nächste Zeile einstellen, die ausgeführt wird. Nur im untersten Rahmen verfügbar. Auf diese Weise können Sie zurückspringen und Code erneut ausführen oder vorwärts springen, um Code zu überspringen, den Sie nicht ausführen möchten.
Es ist zu beachten, dass nicht alle Sprünge erlaubt sind - zum Beispiel ist es nicht möglich, in die Mitte einer for
Schleife oder aus einer finally
Klausel zu springen.
Also, um klar zu sein, möchten Sie den Code so verhalten, als ob eine 'continue'-Anweisung ausgeführt wurde? Du willst nicht, dass 'str (i) 'für diese Schleife gedruckt wird, oder? – Kevin
Das stimmt! – Andor
Übrigens, für das allgemeine Problem "Wie unterscheide ich zwischen pdb-Befehlen und Python-Ausdrücken, die nur wie pdb-Befehle aussehen?" Können Sie Ihrem Python-Ausdruck ein Ausrufezeichen voranstellen. Dies scheint jedoch nicht speziell für 'continue' zu funktionieren. – Kevin