python pdb-跳过循环


88

如何跳过使用的循环pdb.set_trace()

例如,

pdb.set_trace()
for i in range(5):
     print(i)

print('Done!')

pdb在循环之前提示。我输入了一条命令。返回所有1-5个值,然后pdbprint('Done!')执行之前再次提示我。

Answers:


137

尝试until声明。

转到循环的最后一行(使用nextn),然后使用untilunt。这将带您进入循环之后的下一行。

http://www.doughellmann.com/PyMOTW/pdb/有一个很好的解释


从本文开始:使用转到for循环的最后一行n,然后键入until。直到至少超过当前行为止。
sachinruk

也适用于列表推导。您不必关心最后一行。
希瓦

如果转到循环的最后一行很麻烦,该怎么办?真的没有fRdebug函数所使用的“完成当前循环或函数的执行”的等效项adv-r.hadley.nz/debugging.html)吗?
Qaswed

使用不带参数的until(或它的简短形式unt)将总是走下一行(除非您按下return语句),因此您也可以使用它多次而不是n
鲍里斯(Boris)

它不适breakpoint()用于循环中的set python 3。在VB Editor可以接受“对飞”断点,但是这是最有可能不符合情况pdb
蒂莫

4

您应该在循环后设置断点(假定上面的行在名为main.py的文件中,请设置“ break main.py:4”),然后继续操作(“ c”)。


2

在公认的答案(https://pymotw.com/3/pdb/)提到的链接中,我发现本节内容更有用:

要使执行一直运行到特定的行,请将行号传递给直到命令。

这是re:循环如何工作的示例:

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

它使您免于两件事:必须创建额外的断点,以及必须导航到循环的末尾(尤其是当您可能已经迭代以致无法不重新运行调试器而无法执行操作时)。

这是上的Python文档until。顺便说一句,我正在pdb++用作标准调试器的插件(因此可以设置格式),但until两者的工作原理相同。


0

您可以在循环后设置另一个断点,并使用以下命令跳转到该断点(调试时)c

pdb.set_trace()
for i in range(5):
    print(i)

pdb.set_trace()
print('Done!')

-17

如果我正确理解这一点。

一种可能的方法是:

一旦你得到你pdb的提示。只需点击n(下一次)10次即可退出循环。

但是,我不知道退出中的循环的方法pdb

您可以使用r退出功能。


5
如果循环是10000000,该怎么办?您的答案非常明显。
hevvd
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.