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)
有时当我调用 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)