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