我正在使用Python 2.6.6,并使用pdb来调试我的Python程序,但我不清楚" next"之间的区别是什么? "直到"在pdb中,似乎它们都会继续执行,直到当前函数的下一行。
答案 0 :(得分:3)
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说明了差异:
until命令就像下一个,除非它明确地继续执行 使用高于当前值的行号到达同一函数中的一行 值。这意味着,例如,直到可以用来超越结束 一个循环。
<强> 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行,循环已经 耗尽。
与eponymous gdb command分享until
的目的:
,直到
继续运行,直到到达当前堆栈帧中当前行的源行。此命令用于避免单个 不止一次地踩过一个循环。这就像下一个命令, 除了直到遇到跳跃,它会自动继续 执行直到程序计数器大于地址 跳。这意味着当您在单个循环后到达循环结束时 踩到它,直到让你的程序继续执行,直到 它退出循环。相反,循环结束时的下一个命令 简单地回到循环的开头,这迫使你 逐步完成下一次迭代。