python pdb - Schleife überspringen

86

Wie kann ich eine Schleife mit überspringen pdb.set_trace()?

Beispielsweise,

pdb.set_trace()
for i in range(5):
     print(i)

print('Done!')

pdbEingabeaufforderungen vor der Schleife. Ich gebe einen Befehl ein. Alle 1-5 Werte werden zurückgegeben und ich möchte pdbvor der print('Done!')Ausführung erneut dazu aufgefordert werden .

Rhys
quelle

Antworten:

134

Versuchen Sie die untilAussage.

Gehen Sie zur letzten Zeile der Schleife (mit nextoder n) und verwenden Sie dann untiloder unt. Dies bringt Sie direkt nach der Schleife zur nächsten Zeile.

http://www.doughellmann.com/PyMOTW/pdb/ hat eine gute Erklärung

Shreddd
quelle
Aus dem Artikel: Gehen Sie mit zur letzten Zeile der for-Schleife nund geben Sie ein until. Dies wird so lange dauern, bis mindestens diese aktuelle Leitung überschritten wird.
Sachinruk
Funktioniert auch mit Listenverständnissen. Sie müssen sich nicht um die letzte Zeile kümmern.
Shiva
Was würden Sie tun, wenn es umständlich wäre, zur letzten Zeile der Schleife zu gehen? Gibt es wirklich kein Äquivalent zu fder von Rsdebug Funktion, die "die Ausführung der aktuellen Schleife oder Funktion beendet" ( adv-r.hadley.nz/debugging.html )?
Qaswed
Wenn Sie until(oder seine Kurzform unt) ohne Argumente verwenden, wird immer eine Zeile nach unten geschrieben (es sei denn, Sie drücken eine return-Anweisung), sodass Sie sie auch nur ein paar Mal anstelle von verwenden können n.
Boris
4

Sie sollten nach der Schleife einen Haltepunkt setzen ("break main.py:4", vorausgesetzt, die obigen Zeilen befinden sich in einer Datei namens main.py) und dann fortfahren ("c").

Mike
quelle
2

In dem durch die akzeptierte Antwort erwähnten Link ( https://pymotw.com/3/pdb/ ) fand ich diesen Abschnitt etwas hilfreicher:

Übergeben Sie die Zeilennummer an den Befehl till, damit die Ausführung bis zu einer bestimmten Zeile ausgeführt werden kann.

Hier ist ein Beispiel, wie das funktionieren kann re: loops:

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Es erspart Ihnen zwei Dinge: Sie müssen zusätzliche Haltepunkte erstellen und zum Ende einer Schleife navigieren (insbesondere, wenn Sie möglicherweise bereits iteriert haben, sodass Sie dies nicht können, ohne den Debugger erneut auszuführen).

Hier sind die Python-Dokumente until. Übrigens verwende ich pdb++als Drop-In für den Standard-Debugger (daher die Formatierung), untilfunktioniert aber in beiden Fällen gleich.

Zach Valenta
quelle
0

Sie können nach der Schleife einen weiteren Haltepunkt setzen und (beim Debuggen) zu diesem springen c:

pdb.set_trace()
for i in range(5):
    print(i)

pdb.set_trace()
print('Done!')
Qaswed
quelle
-17

Wenn ich das richtig verstanden habe.

Ein möglicher Weg, dies zu tun, wäre:

Sobald Sie erhalten, erhalten Sie pdbprompt. Drücken Sie einfach n(nächste) 10 Mal, um die Schleife zu verlassen.

Mir ist jedoch keine Möglichkeit bekannt, eine Schleife zu verlassen pdb.

Sie können jedoch reine Funktion beenden.

j_juggernaut
quelle
5
Und was ist, wenn die Schleife 10000000 ist? Ihre Antwort ist sehr offensichtlich.
Hecvd