8

为了调试我的 python 代码,我使用ipdb库,并使用set_trace()命令放置断点。一旦代码到达那里,我会得到一个带有ipdb>提示的交互式 shell,我可以使用选项卡自动完成来探索局部变量。

但是,在 IPython (Jupyter) 笔记本ipdb.set_trace()中不起作用。正如这篇文章所建议的那样: 使用 ipdb 在一个单元格中调试 python 代码(jupyter 或 Ipython)

我使用以下替代方法进行交互式调试:

from IPython.core.debugger import Tracer
Tracer()() #this one triggers the debugger

这给了我ipdb>提示,但选项卡自动完成功能不可用。是否有使用 ipython notebook 启用交互式调试的自动完成功能?这非常有用,特别是当您有很多具有长名称的变量时。

4

1 回答 1

1

在 Python 3.7 中,您可以使用breakpoint()函数

此功能将您带到调用站点的调试器中。具体来说,它调用 sys.breakpointhook(),直接传递 args 和 kws。默认情况下, sys.breakpointhook() 调用 pdb.set_trace() 不需要任何参数。在这种情况下,它纯粹是一个便利功能,因此您不必显式导入 pdb 或键入尽可能多的代码来进入调试器。但是, sys.breakpointhook() 可以设置为其他一些函数,并且 breakpoint() 会自动调用它,从而允许您进入选择的调试器。

于 2018-07-20T16:20:21.650 回答