Python+PDB: 如何在从PDB中调用的函数处停止断点?

5

我有一个Python程序,其中包含一个名为foo()的函数。

我使用PDB运行该程序,并在程序中的任意断点处停止。

现在,我可以轻松地从PDB中调用foo()函数,只需输入:

!foo()

foo函数正在运行。一旦它完成,它就会返回到PDB,并且我仍然在程序原始行等待。

但是现在假设我想让PDB停在foo内部的断点上。我在源文件中foo()的第一行设置一个断点,然后执行!foo()。

但是PDB不会在断点处停止。如果从程序内部调用foo(),它似乎只会在那里停止,而不是在程序运行时从PDB的命令行中调用。

有人知道任何解决方法吗?我已经搜索了PDB文档和Google,但没有找到答案。

(我需要这样做的原因是我的程序需要一个小时才能读取所有必要数据进行引导,我需要能够在单个调试会话中尽可能多地进行调试,而不仅仅是添加断点并重新运行程序。因此,在交互式调用函数并在其中进行调试的灵活性将非常有帮助。)


如果您知道行号,可以在会话中设置断点。但是,如果您要在多个文件之间切换,我不太了解该怎么做... 另外,我不知道PDB是否足够智能,以便在会话中运行该函数时尊重这些断点。 - Conrad.Dean
我不确定PDB是否能够做到这一点。无论如何,如果您认为在某个时候您的程序已经准备好调用foo()进行调试,您只需要修改源代码,在那个点调用它,调试问题并在解决问题后删除那个额外的调用即可。 - jcollado
1个回答

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接