Ich bin mit Python 2.6.6 und PDB mit meinem Python-Programm zu debuggen, aber ich bin nicht klar, was ist der Unterschied zwischen „next“ und " bis "in pdb, es scheint, dass beide die Ausführung bis zur nächsten Zeile in der aktuellen Funktion fortsetzen werden., was den Unterschied zwischen „next“ und „bis“ in pdb
Antwort
Die PDB-Hilfe doc beschreibt es so:
(Pdb) help next
n(ext)
Continue execution until the next line in the current function
is reached or it returns.
(Pdb) help until
unt(il)
Continue execution until the line with a number greater than the current
one is reached or until the current frame returns
Mehr helfend, Doug Hellman gives an example in his Python Module Tutorial of the Week, die den Unterschied zeigt:
Der bis Befehl ist wie als nächstes, außer es weiterhin ausdrücklich, bis die Ausführung erreicht eine Zeile in derselben Funktion mit einer Zeilennummer höher als der aktuelle Wert . Das bedeutet beispielsweise, dass bis zum Ende von eine Schleife durchlaufen werden kann.
pdb_next.py
import pdb
def calc(i, n):
j = i * n
return j
def f(n):
for i in range(n):
j = calc(i, n)
print i, j
return
if __name__ == '__main__':
pdb.set_trace()
f(5)
$ python pdb_next.py
> .../pdb_next.py(21)<module>()
-> f(5)
(Pdb) step
--Call--
> .../pdb_next.py(13)f()
-> def f(n):
(Pdb) step
> .../pdb_next.py(14)f()
-> for i in range(n):
(Pdb) step
> .../pdb_next.py(15)f()
-> j = calc(i, n)
(Pdb) next
> .../pdb_next.py(16)f()
-> print i, j
(Pdb) until
0 0
1 5
2 10
3 15
4 20
> .../pdb_next.py(17)f()
-> return
(Pdb)
vor bis laufen gelassen wurde, war die Stromleitung 16, die letzte Zeile der Schleife. Nach dem Ausführen wurde in Zeile 17 ausgeführt, und die Schleife war erschöpft.
Der Zweck until
wird mit den eponymous gdb command geteilt:
bis
weiter, bis eine Source-Leitung über die Stromleitung, in dem aktuellen Stapelrahmens ausgeführt wird, erreicht ist. Dieser Befehl wird verwendet, um einzelne Mehrfachdurchläufe zu vermeiden. Es ist wie der nächste Befehl, außer dass, wenn ein Sprung, bis Begegnungen, es Ausführung automatisch fortgesetzt, bis der Programmzähler größer ist als die Adresse des Sprungs. Dies bedeutet, dass wenn Sie das Ende einer Schleife erreichen, nachdem Sie schrittweise durchlaufen haben, bis Ihr Programm die Ausführung fortsetzt, bis es die Schleife beendet. Im Gegensatz dazu tritt ein nächster Befehl am Ende einer Schleife einfach zurück an den Anfang der Schleife, die Sie Schritt durch die nächste Iteration zwingt.