据我所知,pdb 无法识别源代码在“运行”之间何时发生更改。也就是说,如果我正在调试,注意到一个错误,修复该错误,然后在 pdb 中重新运行程序(即不退出 pdb),pdb 将不会重新编译代码。即使 pdb 列出了新的源代码,我仍然会调试旧版本的代码。
那么,pdb 不会随着源代码的变化而更新编译后的代码吗?如果没有,有没有办法让它这样做?我希望能够留在单个 pdb 会话中,以保留我的断点等。
FWIW,gdb 会注意到它正在调试的程序何时在其下面发生更改,尽管只有在重新启动该程序时才会注意到。这是我试图在 pdb 中复制的行为。
以下迷你模块可能会有所帮助。如果将其导入 pdb 会话中,则可以使用:
pdb> pdbs.r()
随时强制重新加载所有非系统模块,除了main。代码会跳过这一点,因为它会抛出 ImportError('Cannot re-init internal modulemain') 例外。
# pdbs.py - PDB support
from __future__ import print_function
def r():
"""Reload all non-system modules, to reload stuff on pbd restart. """
import importlib
import sys
# This is likely to be OS-specific
SYS_PREFIX = '/usr/lib'
for k, v in list(sys.modules.items()):
if (
k == "__main__" or
k.startswith("pdb") or
not getattr(v, "__file__", None)
or v.__file__.startswith(SYS_PREFIX)
):
continue
print("reloading %s [%s]" % (k, v.__file__), file=sys.stderr)
importlib.reload(v)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)