在 iPython 笔记本中调试的正确方法是什么?

据我所知,%debug magic可以在一个单元内进行调试。

但是,我有跨多个单元的函数调用。

比如说,

In[1]: def fun1(a)
def fun2(b)
# I want to set a breakpoint for the following line #
return do_some_thing_about(b)


return fun2(a)


In[2]: import multiprocessing as mp
pool=mp.Pool(processes=2)
results=pool.map(fun1, 1.0)
pool.close()
pool.join

我试过:

  1. 我试图将 %debug设置在第一个单元格的第一行。但是它会立即进入调试模式,甚至在执行 cell-2之前。

  2. 我试图在代码 return do_some_thing_about(b)之前的行中添加 %debug。但代码会永远运行下去,永不停止。

在 ipython 笔记本中设置断点的正确方法是什么?

126706 次浏览

返回函数在 def 函数(main 函数)的行中,必须给它一个选项卡。 和使用

%%debug

而不是

%debug

调试整个细胞不仅行。希望,也许这会帮助你。

您总是可以在任何单元格中添加以下内容:

import pdb; pdb.set_trace()

并且调试器将在该行上停止。例如:

In[1]: def fun1(a):
def fun2(a):
import pdb; pdb.set_trace() # debugging starts here
return fun2(a)


In[2]: fun1(1)

使用 Ipdb

通过

pip install ipdb

用法:

In[1]: def fun1(a):
def fun2(a):
import ipdb; ipdb.set_trace() # debugging starts here
return do_some_thing_about(b)
return fun2(a)
In[2]: fun1(1)

对于逐行执行,使用 n; 对于进入函数的步骤,使用 s; 对于从调试提示退出,使用 c

可用命令的完整列表: https://appletree.or.kr/quick_reference_cards/Python/Python%20Debugger%20Cheatsheet.pdf

你可以在木星内部使用 ipdb:

from IPython.core.debugger import Tracer; Tracer()()

编辑 : 自 IPython 5.1以来,上面的函数已被弃用。这是一种新的方法:

from IPython.core.debugger import set_trace

在需要断点的地方添加 set_trace()。当输入字段出现时,为 ipdb命令键入 help

只要在木星笔记本上输入 import pdb,然后用这个 备忘录进行调试就可以了,非常方便。

继续,s—— > 步骤,b 12—— > 在第12行设置断点,以此类推。

一些有用的连结: Python 官方文件 pdb Python pdb 调试器示例,以便更好地理解如何使用调试器命令

一些有用的截图: enter image description hereenter image description here

%pdb魔法指令也很好用。只要说 %pdb on,随后 pdb调试器将在所有异常上运行,无论调用堆栈有多深。非常方便。

如果您有要调试的特定行,只需在那里引发一个异常(通常您已经在调试了!)或者使用其他人建议的 %debug魔法命令。

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

breakpoint()

无论您希望运行时在哪里停止,从那里您可以使用相同的 pdb 命令(r,c,n,...)或计算您的变量。

得到错误之后,在下一个单元格中运行 %debug,就是这样。

我刚发现了 精灵调试器。尽管我还没有时间来测试它,但它看起来确实是我们在 ipdb 中调试使用 ipython 的方法中最相似的方法

enter image description here

它还有一个“ value”选项卡

一个本地调试器作为 Jupiter 实验室的扩展可用。几周前发布的这个版本,可以通过获得相关的扩展来安装,也可以安装 xeus-python 内核(这个版本显然没有 ipykernel 用户所熟知的魔力) :

jupyter labextension install @jupyterlab/debugger
conda install xeus-python -c conda-forge

这可以实现其他 IDE 熟知的可视化调试体验。

enter image description here

资料来源: 木星的可视化调试器

在 VsCode 中

文件-> 首选项-> 设置-> 打开设置(JSON)[右上角的小页面图标]

将这行代码粘贴到它的末尾

"jupyter.experimental.debugging": true

现在您应该在顶部的导航栏中看到调试选项

enter image description here