据我所知,pdb无法识别源代码何时在“运行”之间发生了更改。也就是说,如果我正在调试,注意到一个bug,修复这个bug,然后在pdb中重新运行程序(即,不退出pdb),pdb将不会重新编译代码。即使pdb列出了新的源代码,我仍然会调试旧版本的代码。
那么,pdb不会随着源代码的变化而更新编译后的代码吗?如果没有,有办法做到吗?我希望能够停留在一个pdb会话中,以便保留断点等。
FWIW,gdb会注意到它正在调试的程序在它下面发生了变化,尽管只是在程序重新启动时。这是我试图在pdb中复制的行为。
Tags:
ipdb
%autoreload
扩展6.2.0文档文档http://ipython.readthedocs.io/en/stable/config/extensions/autoreload.html#module-IPython.extensions.autoreload:
以下小模块可能有帮助。如果将其导入到pdb会话中,则可以使用:
在任何时候强制重新加载除main之外的所有非系统模块。代码跳过此项,因为它抛出了ImportError('Cannot re init internal modulemain')异常。
“在pdb中重新运行程序”是什么意思如果您导入了一个模块,Python不会重新读取它,除非您明确要求这样做,即使用
reload(module)
。然而,reload
远不是防弹的(另一个策略见xreload)。重新加载Python代码有很多陷阱。为了更可靠地解决您的问题,您可以用一个类来包装pdb,该类将断点信息记录到磁盘上的文件中,并在命令中回放。
(抱歉,忽略这个答案的第一个版本;现在还早,我没有仔细阅读您的问题。)
相关问题 更多 >
编程相关推荐