52

在指令pdbnext不会跳过列表推导,而是逐步完成每次迭代。有没有办法跳过它们,以便在列表理解后的下一行继续调试?

我不得不求助于列出代码,在下一行设置断点,然后继续执行到下一个断点。这很烦人,我认为必须有更好的方法。

4

2 回答 2

68

您可以使用该until命令。help untilin 的输出pdb

unt(il)
继续执行,直到到达数字大于当前行的行或直到当前帧返回

于 2011-06-10T15:30:52.523 回答
3

详细说明 Sven 的回复,正如我最近必须向同事描述until的那样。next它不是特定于stucknext 的列表理解,而是一般的循环。:

until命令类似于next,除了它显式地继续执行,直到执行到同一函数中的行号高于当前值的行。

这意味着您可以使用until

只是为了覆盖stepnext完整性:

step命令用于执行当前行,然后在下一个执行点停止

这意味着它将按指令进行。注意连接;指令将作为一条指令处理。

var A=0; var B=0 #Note: that will count as one instruction

一个命令类似于 step,但不输入从正在执行的语句中调用的函数。实际上,它在单个操作中从函数调用一直到当前函数中的下一条语句。

next有助于跳过多个指令,在多个变量定义的函数中,它将跳过所有指令。

这是一个演示场景的示例:

示例:pdb_until.py

aVar = 3
x = [i for i in range(0,30)]
bVar = 5

使用 Pdb 运行它:

python -m pdb pdb_until.py

开始我们的互动会话:

> pdb_until.py(1)<module>()
-> aVar = 3
(Pdb) step                #our Input, we step
> pdb_until.py(2)<module>()
-> x = [i for i in range(0,10)]
(Pdb) next                #our Input, next
> pdb_until.py(2)<module>()
-> x = [i for i in range(0,10)]
(Pdb) next                #our Input, we are now stuck on line 2
> pdb_until.py(2)<module>()
-> x = [i for i in range(0,10)]
(Pdb) until               #our Input, until steps over (runs list comp)

来源:Python 标准库示例,Doug Hellmann

于 2017-12-08T20:23:09.180 回答