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

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

问题描述:

pdbnext指令不会超越列表解析,而是逐步执行每次迭代。有没有一种方法可以让它们在列表理解后的下一行继续调试?如何跳过Python调试器(pdb)中的列表理解?

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

您可以使用until命令。在pdbhelp until输出:

UNT(IL)
继续执行,直到与许多比目前 一个达到或更大的线,直到当前帧返回

在阐述斯文的答复因为我最近不得不向最近的同事描述untilnext。这是不特定的列表理解是stuck旁边,但对于一般的循环:

until命令就像next,不同之处在于它明确继续执行,直到达到同样的功能用线一个高于当前值的行号。

,这意味着你可以在循环步骤与until

只是为了掩饰的完整性stepnext

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标准库的例子,道格·海尔曼