2015-01-03 7 views

Antwort

3

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.