调试器#

调试在Spyder中通过集成增强版ipdb调试器在IPython控制台中实现。 这允许直接在Spyder图形界面中查看和控制断点及执行流程,同时也能使用所有熟悉的IPython控制台命令。

A Spyder IPython console window, showing the ipdb debugger in action

使用ipdb进行调试#

您可以通过调试菜单、调试工具栏以及可配置的键盘快捷键,配合标准的ipdb 控制台命令来完全控制调试器的执行。

A Spyder IPython console window, showing debugging from toolbar

此外,Editor会用一个箭头显示调试器当前停止的代码行。

Spyder Editor showing the debugging panel

Spyder的调试器提供语法高亮、代码自动补全和命令历史功能,这些功能与普通交互式解释器中的工作方式完全相同。

使用上下箭头键可以调出之前的命令,按Tab键可触发自动补全建议。

A Spyder IPython console window, showing autocompletion when debugging

此外,IPython的magic functions在调试模式下也可用。 例如,您可以运行%ls来列出当前工作目录的内容,或运行%timeit来检查给定代码片段的运行速度。

Ipython console in debug mode showing timeit magic

最后,您可以在Spyder的调试器中像常规IPython提示符一样输入和执行多行语句,轻松运行复杂代码。

Debugger showing multiline debugger

断点#

Spyder的调试器与断点面板集成,该面板列出了每个定义的断点的文件、行号和条件(如果有)。 要打开它,请选择调试 ‣ 列出断点,或按Ctrl-Shift-B(在macOS上是Cmd-Shift-B)。

Spyder's Breakpoints panel, with a number of examples showing file, line number and an optional condition

有几种不同的方法来设置和清除断点:

  • 通过调试菜单中的设置/清除断点选项。

  • 通过按下可配置的键盘快捷键(默认为F12用于普通断点,或Shift-F12用于条件断点)。

  • 通过在编辑器中的打开文件里点击行号左侧(按住Shift键可添加条件断点)。

  • 在代码中使用内置函数breakpoint()

  • 交互式地,在调试会话中使用b命令。

Spyder showing setting conditional breakpoint

您可以通过变量浏览器在每个断点处访问和编辑局部及全局变量。

Spyder's console and variable explorer showing local and global variables when debugging

高级功能#

在调试时,您可以通过启用Spyder首选项中的新选项调试时忽略Python库(位于IPython控制台 ‣ 调试器 ‣ 调试下)来避免单步执行其他Python包。 这将跳过您已安装的所有内置和第三方Python模块。

Spyder's preferences showing Ignore Python libraries while debugging options

如果您的代码中有与Pdb命令同名的变量(例如bstep),在调试时仍可以正常引用它们。 要调用相应的Pdb命令,只需在其前面加上感叹号(例如!b!step)。

Spyder's IPython console showing Pdb commands

您可以让Spyder在每次调试器停止时自动执行自定义代码片段。 例如,您可以用它来设置特定变量,或导入常用模块,以便在调试时始终可用。 要进行设置,请前往首选项 ‣ IPython控制台 ‣ 调试器 ‣ 调试时运行代码,并输入您希望在每个步骤中执行的代码。

Spyder's preferenes with debugging snippet

Matplotlib支持#

在调试器处于活动状态时,完全支持生成Matplotlib图形,包括所有不同的图形后端。 使用%matplotlib魔法命令切换到交互式后端(例如%matplotlib qt5)以在单独窗口中平移、缩放和调整绘图,或切换回默认的inline%matplotlib inline)以在Plots面板中直接查看显示结果。

Debugger showing matplotlib interactive backend

为了避免在调试时显示绘图,请在首选项 ‣ IPython控制台 ‣ 调试器中停用调试时处理执行事件选项。