2015-01-03 14 views
5

Sto usando Python 2.6.6 e uso pdb per eseguire il debug del mio programma Python, ma non sono chiaro su quale sia la differenza tra "next" e "next" fino a "in pdb, sembra che entrambi continueranno l'esecuzione fino alla riga successiva nella funzione corrente.qual è la differenza tra "next" e "until" in pdb

risposta

3

Il doc Guida PPB descrive in questo modo:

(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 

più utilmente, Doug Hellman gives an example in his Python Module Tutorial of the Week che illustra la differenza:

L'fino comando è come il prossimo, tranne che continua in modo esplicito, fino all'esecuzione raggiunge una linea nella stessa funzione con un numero di linea superiore al valore attuale di . Ciò significa, ad esempio, che fino a quando non può essere utilizzato per superare la fine di un ciclo.

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) 

Prima finché è stato eseguito, la riga corrente era 16, l'ultima riga del loop . Dopo l'esecuzione, l'esecuzione era sulla linea 17 e il ciclo era stato esaurito.

Lo scopo di until è condiviso con il eponymous gdb command:

fino

lavoro fino a linea di source oltre la linea corrente, in stack frame corrente, viene raggiunto. Questo comando viene utilizzato per evitare che il singolo passi attraverso un loop più di una volta. È come il comando successivo, eccetto che quando si incontra un salto, continua automaticamente l'esecuzione finché il contatore del programma non supera l'indirizzo del salto . Ciò significa che quando si raggiunge la fine di un ciclo dopo il singolo passaggio , fino a quando il programma continua l'esecuzione fino allo , si esce dal ciclo. Al contrario, un comando successivo alla fine di un ciclo riporta semplicemente all'inizio del ciclo, che obbliga a passare attraverso l'iterazione successiva.

Problemi correlati