pdb调试器从set_trace逃逸

时间:2019-06-28 07:54:32

标签: python debugging jupyter-notebook pdb ipdb

每当我用

设置单元格时
import pdb
pdb.set_trace() 
a = 100

在jupyter笔记本中,跟踪器将使用set_trace()代替下一行进入n方法。

我不知道该怎么办?如何获得下一行a = 100

更糟糕的是,即使跳到j的那一行也会提供错误:

  

***跳转失败:只能从“行”跟踪事件跳转

2 个答案:

答案 0 :(得分:0)

使用调试器的b之类的选项b 20设置断点,这样我就在get_trace之后(继续)从c逃脱了。

我很乐意接受针对此问题的适当解决方案。

答案 1 :(得分:0)

这是pdb / ipdb的事后模式。像jumpnextstepreturn这样的命令不可用,因为该脚本不再运行。

事后验验模式用于侦听未处理的异常并在引发此类异常时检查程序状态,而不必在代码中加上pdb.set_trace()(或简单地加上{{1} }(自python 3.7以来)。可以通过类似breakpoint()的方式轻易引发,而无需定义print(a)或经典除以零的a

1/0命令(简写为continue)在事后检验模式下可用,但在这种模式下的真正作用是使pdb / ipdb完成事后检验,重新加载文件,并使用任何断点(简写c)重新启动脚本,例如b对于第20行,您可能在验尸期间已做好准备。

另请参见this answer,以解决类似问题。

Steven Kryscala on codementor说:

当pdb说它将重新启动程序时,或者当您使用重新启动命令时,对要调试的脚本的代码更改将自动重新加载。重新加载后仍将设置断点,但由于行号移位,可能需要清除并重新设置断点。对其他导入的模块的代码更改将不会重新加载-您将需要退出并重新运行-mpdb命令以将其提取。