python ipdb.set_trace() 一帧 "up" (frame=?)

python ipdb.set_trace() one frame "up" (frame=?)

有时当我调用 ipdb 时,我 知道 我想成为跟踪设置上方的框架。我想这就是 API 公开 frame 参数的原因(如 the documentation 中所述)。

函数如下:

import inspect, ipdb

def invoke_a_frame_up():
   ipdb.set_trace(frame=inspect.stack()[i][0])

我试图弄清楚函数中的 i 是什么,以便在调用 invoke_a_frame_up 时,跟踪不在 invoke_a_frame_up.

或者,更恰当地说,我正在尝试弄清楚如何实现这一目标。我已经尝试了每个 i 的堆栈深度,无论如何跟踪似乎都从同一帧开始,直到 i 大于深度,此时我得到 IndexError('list index out of range',).

import inspect
import ipdb

def dbg_up():
    ipdb.set_trace(inspect.currentframe().f_back.f_back)

def foo():
    var = 'in foo'
    bar()

def bar():
    var = 'in bar'
    dbg_up()

foo()

原版用户pdb:你们的界面有点不同,像这样:

pdb.Pdb().set_trace(inspect.currentframe().f_back.f_back)