【问题标题】:pdb debugger escape from set_tracepdb 调试器从 set_trace 逃逸
【发布时间】:2019-06-28 07:54:32
【问题描述】:
每当我用
设置单元格时
import pdb
pdb.set_trace()
a = 100
在 jupyter 笔记本中,跟踪器将进入 set_trace() 方法,并使用 n 而不是下一行。
我不知道该怎么办?我怎样才能得到下一行a = 100。
更糟糕的是,即使使用j 跳转到该行也会提供错误:
*** 跳转失败:只能从'line'跟踪事件跳转
【问题讨论】:
标签:
python
debugging
jupyter-notebook
pdb
ipdb
【解决方案1】:
使用调试器的b 选项b 20 设置断点,这样我就在c 之后从get_trace 逃脱(继续)。
我很乐意接受这个问题的适当解决方案。
【解决方案2】:
这是 pdb/ipdb 的事后分析模式。 jump、next、step、return 等命令不可用,因为脚本不再运行。
事后分析模式用于拦截未处理异常并在引发此类异常时检查程序状态,而无需在代码中撒上pdb.set_trace()(或从python 3.7开始就简单地使用breakpoint()) )。可以很容易地被print(a) 之类的东西激怒,而无需定义a 或经典的零除法1/0。
continue 命令,简写 c,在事后分析模式下是可用的,但在这种模式下它真正的作用是导致 pdb/ipdb 完成事后分析,重新加载文件,并使用任何断点重新启动脚本,简写 b,例如b 20 第 20 行,你可能已经在验尸时做好了准备。
另请参阅this answer 以了解类似问题。
正如Steven Kryscala on codementor 所说:
当 pdb 说它将重新启动程序时,或者当您使用重新启动命令时,您正在调试的脚本的代码更改将自动重新加载。重新加载后仍会设置断点,但由于行号移动,可能需要清除和重新设置。不会重新加载对其他导入模块的代码更改 - 您需要退出并重新运行 -mpdb 命令以获取这些更改。