如何在特定栈帧上进入PDB

How to enter PDB on a specific stack frame

我编写了一个函数,在出现异常时进入 PDB(我们称之为 trace_on_error)。现在,当我调用 pdb.set_trace() 时,pdb 合理地进入了 trace_on_error 的堆栈帧,要求我在能够查看调用函数的帧之前必须键入 up 命令。

我试图让 trace_on_error 不要求用户知道它是如何实现的,因此我想让 pdb 进入调用者堆栈框架。当我查找文档时,我希望找到类似于 pdb.set_trace(frame_up=1) 的内容,但我没有找到任何东西。

示例代码:

def trace_on_error(f, errors):
    try:
        return f()
    except errors as e:
        pdb.set_trace()

如果您有兴趣查看完整代码而不是最小片段,请参阅此处:https://github.com/ethomas2/trace/blob/master/trace.py

这应该可以解决问题(我已经对其进行了测试,但不确定它是否适用于所有可能的情况):

def trace_on_error(f, errors):
    try:
        return f()
    except errors as e:
        import sys
        from pdb import Pdb
        Pdb().set_trace(sys._getframe().f_back)