Spyder 3 Python调试功能实战指南:断点、条件与单步执行

Ryan
Ryan
发布时间:2026-10-16 | 5人浏览过
原创

本文详细记录Spyder 3中Python程序的调试步骤,涵盖从基础断点设置到条件断点的配置方法。重点解析如何使用Ctrl+F5启动调试、利用!命令查看或修改变量,以及Step Into和Return按钮在函数调用中的具体行为。通过实例演示单步执行、断点状态判断及变量临时赋值技巧,帮助开发者快速掌握Spyder调试核心功能。

本文旨在记录使用Spyder调试Python程序的实践过程。由于Spyder的调试功能基于pdb,对于缺乏pdb基础的用户而言,初期上手可能存在不适应感。在尝试通过百度和CSDN搜索资料未果后,作者最终查阅官方文档并结合实际操作,成功掌握了Spyder的调试功能。本文使用的Spyder版本为3.1.4,可通过pip list命令查看当前安装的Spyder版本。

Spyder官方文档地址

http://pythonhosted.org/spyder/

开始调试

首先编写一个简单的示例程序用于后续调试操作:


# -*- coding: utf-8 -*-
"""
Created on Mon Aug 28 23:59:40 2017

@author: 燃烧杯
"""

a = 'a'
b = 'b'
c = 'c'
e = 'e'
f = 'f'
g = 'g'
h = 'h'
print(a)

暂时不设置断点,尝试以Debug模式运行该代码。

点击Spyder工具栏上的Debug file按钮,或直接使用快捷键Ctrl+F5启动调试模式。

在IPython界面中会输出如下内容:

出现ipdb提示符表明已进入调试模式。从输出内容可见,程序当前指向第一行代码。接着在提示符中输入c(continue的缩写,表示程序继续向下执行直到遇到下一个断点),将输出如下结果:

程序执行结束。值得注意的是,即使未设置断点,程序仍会在第一句代码执行前中断(经测试确认,中断发生时第一句尚未执行)。这与其他编译器(如Eclipse和IntelliJ)的行为不同,后者在未设断点时通常会正常执行到底。虽然初期可能感到困惑,但适应后即可习惯此行为。 若仔细观察工具栏截图,会发现Debug按钮组的第五个按钮功能与上述c命令一致。然而,在当前版本的Spyder中该按钮存在Bug:程序执行结束后不会自动退出pdb,且后续使用q命令也无法退出,导致程序卡在pdb中。较高版本的Spyder可能已修复此问题,建议尝试更新版本。

打断点的两种姿势

普通的breakpoint

在Spyder中设置断点的方法非常简单:只需在目标代码行的行首双击鼠标即可。如图所示,我们尝试建立一个断点:


在每次开始Debug之前,建议在Spyder的IPython界面中输入%reset以清除工作空间中的所有变量,避免影响后续测试。 按下Ctrl+F5开始Debug,并进行如下操作:

此时程序已到达断点处。通过箭头(–>)以及d:\ide\pyproject\pdbtest\test1.py(12)<module>()中显示的数字12可以看出,程序刚刚执行到了第12行(即我们设置断点的这一行)。关键在于判断第12行代码是否已执行:只需测试变量f是否存在。尝试在ipdb中输入如下命令:

!(python语句)表示在当前状态下执行该Python语句。上述用法旨在查看变量内容。从!f返回的错误信息可以看出,f尚未定义,这意味着第12行代码(f='f')尚未执行。同时,查看变量e发现其已被定义,说明第11行代码已执行完毕。通过上述实验可以得出结论:Spyder会在断点语句执行之前暂停程序。

带条件的breakpoint

双击第12行代码开头创建的“小红点”即可取消该断点。 若按住Ctrl+Shift键,然后像之前一样双击第12行行首,会弹出一个小对话框:

在该对话框中可以输入断点的触发条件,该条件必须是任意返回True或False的Python语句。例如,我输入:


(a==4)and(b==5)

点击OK按钮后,发现小红点上多了一个问号,这表示已设置为条件断点(conditional breakpoint)。接下来启动Debug进行测试。


程序仅在开头暂停了一次,断点并未生效。这是因为在断点触发时,变量a的值为'a',变量b的值为'b',不满足设定的条件,因此程序不会在此中断。

现在重新启动Debug,然后连续按三遍Ctrl+F10,程序执行到了第十行:


实际上,Ctrl+F10用于单步执行,每按一次执行一行代码,这相当于点击工具栏上如下图所示的按钮:

此时,可以使用之前提到的!(python语句)命令为变量a和b临时指定值。在ipdb提示符中输入!a=4;b=5,然后使用c命令继续执行。程序在条件断点处成功中断,因为此时变量值满足了我们之前设定的条件:

如果忘记了条件断点的具体内容,可以按住Ctrl+Shift键双击“带问号的小红点”,即可查看或修改条件。若要取消断点,直接双击即可。

总结一下刚刚所讲的

  1. Ctrl+F5 以Debug模式运行文件
  2. 在debug之前记得用%reset 指令清空一下ipython工作空间中的变量,以免影响debug中变量值的查看
  3. 无论你是否打断点,都会在第一行语句执行之前中断一次
  4. !(python语句)可以在pdb提示符下执行python语句,可以用来查看变量值或者给变量临时指定值
  5. c命令或者Ctrl+F12可以让程序执行到下一个断点
  6. q命令退出调试
  7. Ctrl+F10 单行执行
  8. 双击行首设置断点,按住Ctrl+Shift 双击行首可以设置条件断点

剩下的一些细节

上述示例已涵盖大多数常用功能。如果曾使用其他编译器(如Eclipse和IntelliJ)的调试功能,阅读至此已足够。对于有调试经验的开发者,下文介绍的两个功能通过按钮名称即可大致了解其用途。 具体如下:

Step Into

上一张图中的按钮功能称为Step Into(下一张图中的按钮功能称为return),用于进入函数体内部。为了更清晰地说明其功能,我们在Spyder中创建如下程序:


# -*- coding: utf-8 -*-
"""
Created on Tue Aug 29 14:22:46 2017

@author: 燃烧杯
"""

def myTest():
    c = 'a'
    d = 'b'
    e = 'c'
    return c

a = 'a'
b = 'b'
c = myTest()
f = 'f'
print(a)

开始Debug,不断按Ctrl+F10进行单步执行。当运行到c = myTest()这句时请注意观察:

无论myTest()函数内部有多少代码,都会被视为一行直接跳过。使用q命令退出调试。 重新Debug该文件,单步执行到c = myTest()这行时,按Ctrl+F11使用Step Into功能,此时会进入函数内部的代码段:

这就是Step Into的主要功能。

Return

Return的功能与Step Into相反。当使用Step Into进入函数后,按Ctrl+Shift+F11会直接跳转到该函数执行的最后一行。此时再按一遍Ctrl+Shift+F11或者Ctrl+F10(单步执行)即可跳出函数。读者可自行在上述示例中尝试此功能。

到此这篇关于使用spyder3调试python程序的实现步骤的文章就介绍到这了,更多相关spyder3调试python内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表