Spyder断点调试

男娘i 2022-01-20 03:49 815阅读 0赞

Spyder官方文档地址


http://pythonhosted.org/spyder/


一、功能键介绍:

设置断点:鼠标左键双击或者F12

其他功能键功能如下:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTI3ODI2NQ_size_16_color_FFFFFF_t_70

二、开始调试

先写一个简单的小程序用于调试:

  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Mon Aug 28 23:59:40 2017
  4. @author: 燃烧杯
  5. """
  6. a = 'a'
  7. b = 'b'
  8. c = 'c'
  9. e = 'e'
  10. f = 'f'
  11. g = 'g'
  12. h = 'h'
  13. print(a)

我们暂时先不打断点,用debug的方式运行该代码试试

format_png

点击spyder工具栏上的Debug file按钮,或者使用快捷键Ctrl+F5开始调试。

在ipython界面会输出如图所示的内容:

format_png 1

  1. first debug
  2. 出现了ipdb提示符,说明我们已经进入了调试模式,上面输出的内容可以看出是代码的第一行,接着在提示符中输入c(continue的缩写,表示程序继续向下执行到下一个断点),会输出如下内容:

format_png 2

  1. first\_debug\_end
  2. 程序执行结束,可见即使我们没有打断点,仍然会在第一句执行之前中断(经测试,中断的时候第一句还没有执行),这个和我用过的其他编译器不太一样(比如eclipseIntelliJ,在不打断点的情况下会正常执行到底),一开始还让我困惑了一下,后来就适应了.
  3. 注:在每次开始debug之前,先在spyderipython界面中输入`%reset` 把工作空间的所有变量清除,以免影响到我们接下来的测试.
  4. ![format_png 3][]
  5. to\_breakpoint

然后我们就到达了断点处,从箭头(—>)以及d:\ide\pyproject\pdbtest\test1.py(12)<module>() 中的数字12可以看出程序刚刚执行到了第12行(也就是我们打断点的这一行),第12行到底有没有执行呢?只要测试一下f变量是否存在就可以了,尝试在ipdb中进行如下输入:

  1. ![format_png 4][]
  2. ipdb

!(python语句)的意思就是在当前状态下执行该python语句,我刚刚的用法的意思显然是查看变量内容,从!f 的错误信息可以看出f尚未定义,即第12行代码(f='f')还没有执行,查看e变量发现e变量已经被定义了,这说明第11行已经执行结束了。通过以上实验可以看出,spyder会在断点语句的执行之前中断

三、Step Into的用法

  1. ![format_png 5][]
  2. ![format_png 6][]

上面一张图的按钮的功能我们称之为Step Into(下面一张图的按钮的功能我们称之为return),用于进入一个函数体内部,为了更清楚的说明它的功能,我们给出一个例子,在spyder中创建如下程序:

  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Tue Aug 29 14:22:46 2017
  4. @author: 燃烧杯
  5. """
  6. def myTest():
  7. c = 'a'
  8. d = 'b'
  9. e = 'c'
  10. return c
  11. a = 'a'
  12. b = 'b'
  13. c = myTest()
  14. f = 'f'
  15. print(a)

我们开始debug,不断地按Ctrl+F10 单行执行这个程序,当运行到c = myTest() 这句时注意一下:

  1. ![format_png 7][]
  2. not\_step\_into

不管myTest()中有多少代码都直接当做一行跳了过去,用q命令退出调试。
重新debug该文件,单行执行到c = myTest() 这行时按Ctrl+F11 使用Step Into功能,发现我们进入了函数内部的代码段:

  1. ![format_png 8][]
  2. step\_into

这就Step Into的主要功能.

四、Return

Return的功能与Step Into的功能刚好相反,当使用Step Into进入函数之后,按Ctrl+Shift+F11 后会直接跳到该函数的执行的最后一行,此时在按一遍Ctrl+Shift+F11 或者Ctrl+F10 (单行执行)就可以跳出函数了,想要尝试的话可以自行在我上面给出的例子中尝试.

转自:https://www.jianshu.com/p/082b20fcafea

发表评论

表情:
评论列表 (有 0 条评论,815人围观)

还没有评论,来说两句吧...

相关阅读