如何跳过Python调试器(pdb)中的列表理解?
问题描述:
pdb
next
指令不会超越列表解析,而是逐步执行每次迭代。有没有一种方法可以让它们在列表理解后的下一行继续调试?如何跳过Python调试器(pdb)中的列表理解?
我不得不求助于列出代码,在下一行设置一个断点,然后继续执行到下一个断点。这很烦人,我觉得必须有更好的方法。
答
您可以使用until
命令。在pdb
的help until
输出:
UNT(IL)
继续执行,直到与许多比目前 一个达到或更大的线,直到当前帧返回
答
在阐述斯文的答复因为我最近不得不向最近的同事描述until
和next
。这是不特定的列表理解是stuck
旁边,但对于一般的循环:
的
until
命令就像next
,不同之处在于它明确继续执行,直到达到同样的功能用线一个高于当前值的行号。
,这意味着你可以在循环步骤与until
只是为了掩饰的完整性step
和next
:
的
step
命令用于执行当前行,然后停止在下一个执行点
这意味着它将按指令进行指令。注意连接;
的instrucitons将作为一条指令处理。
var A=0; var B=0 #Note: that will count as one instruction
的下一个命令是相同的步骤,但不进入功能,从正在执行的语句调用。实际上,它在一次操作中一直通过函数调用到当前函数中的下一个语句。
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标准库的例子,道格·海尔曼