2024-04-25 22:26:34 发布
网友
我想让我的调试器在遇到异常时运行post_mortem(),而不必修改我正在处理的源代码。我看到很多例子涉及到在try/except块中包装代码,但是我希望它总是运行,不管我在做什么。在
post_mortem()
我曾写过一个python包装器脚本,但那一定很难看,而且几乎无法使用。在
我使用pudb,这是与pdb等效的API,因此特定于pdb的答案是可以的。我从我的编辑器(vim)中运行代码,并且希望在遇到异常时出现pm。在
一个可能的解决方案是调用pdb(我不知道pudb,但我假设它的工作原理相同):
pdb
pudb
python -m pdb script.py
引用the documentation:
When invoked as a script, pdb will automatically enter post-mortem debugging if the program being debugged exits abnormally. After post-mortem debugging (or after normal exit of the program), pdb will restart the program.
我花了几个月的时间对此束手无策,但我碰巧找到了一个解决办法。我相信这对经验丰富的人来说并不是什么新鲜事。在
我的环境中有以下情况:
export PYTHONUSERBASE=~/.python export PYTHONPATH=$PYTHONPATH:$PYTHONUSERBASE
我有以下文件:
包括以下内容:
import traceback import sys try: import pudb as debugger except ImportError: import pdb as debugger def drop_debugger(type, value, tb): traceback.print_exception(type, value, tb) debugger.pm() sys.excepthook = drop_debugger __builtins__['debugger'] = debugger __builtins__['st'] = debugger.set_trace
现在,无论是交互还是其他方式,调试器总是在出现异常时跳转。把这个弄得漂亮点。在
确保您的site-packages中没有no-global-site-packages.txt,这一点很重要。这将使用默认的site.py禁用usercustomize模块(我的virtualenv有一个no-global-site-packages.txt)
site-packages
no-global-site-packages.txt
site.py
usercustomize
为了以防万一它能帮助其他人,我留下了关于修改__builtins__的内容。我发现总是能够依赖某些可用的工具是非常方便的。在
__builtins__
味道和味道。在
一个可能的解决方案是调用
pdb
(我不知道pudb
,但我假设它的工作原理相同):引用the documentation:
我花了几个月的时间对此束手无策,但我碰巧找到了一个解决办法。我相信这对经验丰富的人来说并不是什么新鲜事。在
我的环境中有以下情况:
我有以下文件:
^{pr2}$包括以下内容:
现在,无论是交互还是其他方式,调试器总是在出现异常时跳转。把这个弄得漂亮点。在
确保您的
site-packages
中没有no-global-site-packages.txt
,这一点很重要。这将使用默认的site.py
禁用usercustomize
模块(我的virtualenv有一个no-global-site-packages.txt
)为了以防万一它能帮助其他人,我留下了关于修改
__builtins__
的内容。我发现总是能够依赖某些可用的工具是非常方便的。在味道和味道。在
相关问题 更多 >
编程相关推荐