有时,当我调用 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()
vanilla pdb
的用户:您的界面略有不同,如下所示:
pdb.Pdb().set_trace(inspect.currentframe().f_back.f_back)
我是一名优秀的程序员,十分优秀!