pdb 事后调试:在异常处理程序中退出后跳转到引发异常
pdb postmortem debug: jump to raise of exception after exiting in exception handler
我很好奇是否存在让 ipdb-debugger 跳回 引发异常的来源的命令。
考虑以下小程序。
import sys
import random
def somefun():
someval = random.random()
raise Exception()
def run():
try:
somefun()
except Exception:
sys.exit(10)
当 运行 来自命令行的 run
函数(使用 ipython-console)时,它会以 10 退出。
有没有办法启动 post mortem debugger (pdb.pm()
) 并通过跳转获取 someval
的值?
except Exception:
sys.exit(10)
Is there a way to ... get the value of someval by jumping back?
没有。它不见了。您的错误处理程序吞下了异常
并做了 python 认为“正常”的事情,
尽管父进程会将非零退出状态解释为错误。
在调试上下文中引发致命的 python 错误。
这是一种方法:
except Exception:
if debug:
raise
else:
sys.exit(10)
然后调用 $ python -m pdb some_script.py
会让你
使用以下方法检查回溯和值:
(Pdb) bt
和
(Pdb) p someval
我很好奇是否存在让 ipdb-debugger 跳回 引发异常的来源的命令。
考虑以下小程序。
import sys
import random
def somefun():
someval = random.random()
raise Exception()
def run():
try:
somefun()
except Exception:
sys.exit(10)
当 运行 来自命令行的 run
函数(使用 ipython-console)时,它会以 10 退出。
有没有办法启动 post mortem debugger (pdb.pm()
) 并通过跳转获取 someval
的值?
except Exception: sys.exit(10)
Is there a way to ... get the value of someval by jumping back?
没有。它不见了。您的错误处理程序吞下了异常 并做了 python 认为“正常”的事情, 尽管父进程会将非零退出状态解释为错误。
在调试上下文中引发致命的 python 错误。 这是一种方法:
except Exception:
if debug:
raise
else:
sys.exit(10)
然后调用 $ python -m pdb some_script.py
会让你
使用以下方法检查回溯和值:
(Pdb) bt
和
(Pdb) p someval