debugging 我如何跳过一个循环与PDB?

11dmarpk  于 2023-10-24  发布在  其他
关注(0)|答案(6)|浏览(201)

如何使用pdb.set_trace()跳过循环?
比如说,

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

print('Done!')

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

c3frrgcw

c3frrgcw1#

试试until语句。
转到循环的最后一行(使用nextn),然后使用untilunt。这将带您到下一行,就在循环之后。
http://www.doughellmann.com/PyMOTW/pdb/有很好的解释

1cosmwyk

1cosmwyk2#

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

isr3a4wc

isr3a4wc3#

在接受的答案(https://pymotw.com/3/pdb/)提到的链接中,我发现这一节更有帮助:
要让执行运行到特定的行,请将行号传递给until命令。
下面是一个如何使用re:loops的例子:

它使您不必做两件事:必须创建额外的断点,以及必须导航到循环的末尾(特别是当您可能已经迭代过,因此如果不重新运行调试器就无法迭代时)。
这是关于until的Python文档。顺便说一下,我使用pdb++作为标准调试器的插入(因此格式化),但until在两者中的工作方式相同。

omqzjyyz

omqzjyyz4#

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

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

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

beq87vna5#

您可以使用tbreak <line number after loop>tbreak是一个临时断点,在第一次命中时会删除。

mec1mxoz

mec1mxoz6#

如果我没理解错的话。
一种可能的方法是:
一旦你得到pdb提示符。只需点击n(下一个)10次退出循环。
但是,我不知道在pdb中退出循环的方法。
你可以使用r来退出一个函数。

相关问题