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

时间:2018-01-25 21:08:48

标签: python ipdb

有时当我调用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时,跟踪 { {1}}。

或者,更合适的是,我试图弄清楚如何实现这一目标。我已经尝试了每一个我的堆栈深度,并且跟踪似乎从相同的帧开始,直到我大于深度,此时我得到invoke_a_frame_up

1 个答案:

答案 0 :(得分:1)

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()

vanilla pdb的用户:您的界面略有不同,如下所示:

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