Я использую Python 2.6.6 и используя pdb для отладки моей программы Python, но я не понимаю, в чем разница между «следующей» и «следующей», пока "в pdb, кажется, что оба они продолжат выполнение до следующей строки в текущей функции.В чем разница между «next» и «until» в pdb
ответ
PDB помощь документ описывает это следующим образом:
(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
Более услужливо Doug Hellman gives an example in his Python Module Tutorial of the Week, который иллюстрирует разницу:
, пока команда не будет, как в следующем, за исключением того, что явно продолжается до выполнения достигает строка в той же функции с номером строки, превышающим текущее значение . Это означает, например, что до тех пор, пока не будет использован переход к концу цикла .
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)
Перед тем, пока не был запущен, текущая линия была 16, последняя строка цикла . После того, как побежал, исполнение было в строке 17, а цикл был исчерпан.
Цель until
не делится с eponymous gdb command:
до
Продолжайте работать до исходной строки, следующей за текущей, в текущем кадре стека достигается. Эта команда используется, чтобы избежать одиночного , проходящего через цикл более одного раза. Это похоже на следующую команду: , за исключением того, что до тех пор, пока не наступит прыжок, он автоматически продолжит выполнение , пока счетчик программы больше, чем адрес прыжка . Это означает, что когда вы достигнете конца цикла после одиночного , шаг за шагом, пока ваша программа не продолжит выполнение до , она выйдет из цикла. Напротив, следующая команда в конце цикла просто возвращается к началу цикла, что заставляет вас пройти следующую итерацию.