调试器#

Spyder 通过与 IPython 控制台中增强的 ipdb 调试器集成,提供调试支持。这允许用户直接从 Spyder GUI 查看和控制断点及执行流程,同时也能使用所有熟悉的 IPython 控制台命令。

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

使用 ipdb 调试#

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

A Spyder IPython console window, showing debugging from toolbar

此外,编辑器会用箭头指示调试器当前停止的代码行。

Spyder Editor showing the debugging panel

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

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

A Spyder IPython console window, showing autocompletion when debugging

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

Ipython console in debug mode showing timeit magic

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

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 的偏好设置中,在 IPython 控制台 ‣ 调试器 ‣ 调试 下启用新的 调试时忽略 Python 库 选项,从而避免在调试时单步执行其他 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)以在 绘图 窗格中直接显示它们。

Debugger showing matplotlib interactive backend

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