Spyder断点调试

Spyder官方文档地址


http://pythonhosted.org/spyder/


一、功能键介绍:

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

其他功能键功能如下:

Spyder断点调试_第1张图片

二、开始调试

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

# -*- 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断点调试_第2张图片

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

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

Spyder断点调试_第3张图片

                                                                                      first debug

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

Spyder断点调试_第4张图片

                                                                                    first_debug_end

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

       Spyder断点调试_第5张图片

                                                                                   to_breakpoint

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

                                               Spyder断点调试_第6张图片

                                                                                         ipdb

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

三、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() 这句时注意一下:

                      Spyder断点调试_第7张图片

                                                                                      not_step_into

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

                                     Spyder断点调试_第8张图片

                                                                                 step_into

这就Step Into的主要功能.

四、Return

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

 

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

你可能感兴趣的:(TransorFlow笔记)