You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jupyter Notebook中pdb调试器触发‘跳过隐藏帧’的原因及解决方法

Jupyter Notebook中breakpoint()调试跳转到IPython代码的解决方法

问题描述

在Jupyter Notebook单元格中执行以下代码:

a=1
b=1
breakpoint()
c=1
d=1

触发ipdb调试后,输入n单步执行时,多次出现[... skipped 1 hidden frame]提示,且跳转到IPython的interactiveshell.py代码,而非预期执行c=1。

解决方法

1. 使用IPython魔法命令%debug替代直接breakpoint

  • 先移除代码中的breakpoint(),运行单元格代码
  • 在新的单元格中输入%debug,进入调试会话
  • 输入b 3(对应你要调试的代码行号,这里是c=1所在行)设置断点
  • 输入run重新执行代码,此时会在你设置的断点处暂停,后续用n就能正常步进自己的代码

2. 配置ipdb显示所有栈帧

  • 临时生效:进入ipdb调试会话后,输入命令set nohidden,此时会显示所有调用栈帧,再用u(向上切换栈帧)回到自己的代码栈,之后用n就能正常步进
  • 永久生效:
    • 方式一:替换代码中的breakpoint()为:
      import ipdb
      ipdb.set_trace(nohidden=True)
      
    • 方式二:设置环境变量PYTHONBREAKPOINT="ipdb.set_trace(nohidden=True)",之后直接用breakpoint()就会默认开启nohidden模式

3. 使用Jupyter可视化调试工具

新版Jupyter Lab/Notebook内置了可视化调试面板:

  • 在左侧边栏打开调试器(Debugger)选项
  • 直接在代码行号左侧点击添加断点
  • 点击调试按钮启动调试,可通过面板的步进按钮控制执行,完全避免命令行调试的栈帧跳转问题

原因说明

Jupyter执行单元格代码时,会通过IPython的InteractiveShell进行包装执行,调试器默认会跳过这些框架代码,但实际执行时仍可能进入这些隐藏栈帧。开启nohidden或使用魔法命令/可视化调试,能绕开IPython的包装层,聚焦在用户代码上。

内容的提问来源于stack exchange,提问作者Leonardo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 08:45:47