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

标签 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被调用时,跟踪不在内部 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)

关于python ipdb.set_trace() 一帧 "up"(frame=?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48451943/

相关文章:

python - Itertools.product 引发 "Error in argument"

python - 使用列表生成器时 Python 3 中的 pdb 模块中可能存在错误

python - 如何退出 ipdb 调试器?

django - 在线程中创建的 SQLite 对象只能在具有 Django 2.2.2 和 ipdb 的同一线程中使用

debugging - 使用 ipdb 在一个单元中调试 python 代码(jupyter 或 Ipython)

python - 如何在文本分割器(langchain)之后将代码分配给文件?

python - 如何在融合的kafka python中读取批处理消息?

python - NumPy 中可以使用分层广播吗?

python - 使用 Matplotlib 在 Python 中使用鼠标在图像上绘制点

python - 如何追加屏蔽数组