繁体   English   中英

如何跳过 Python 调试器 (pdb) 中的列表理解?

[英]How do you skip over a list comprehension in Python's debugger (pdb)?

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

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

您可以使用until命令。 Output 的help untilpdb中:

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

详细说明 Sven 的回复,正如我最近在一位同事untilnext所描述的那样。 它不是针对下一个stuck的列表理解,而是针对一般的循环。:

until命令类似于next ,只是它明确地继续执行,直到执行到达同一 function 中的行号高于当前值的行。

这意味着您可以使用until跳过循环

为了完整起见,仅涵盖stepnext

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

这意味着它将逐条指令 go 指令。 注意用;连接指令将作为一条指令处理。

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

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

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

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

示例:pdb_until.py

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

使用 Pdb 运行它:

python -m pdb pdb_until.py

启动我们的交互式 session:

> 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM