spyder(python3.7)使⽤教程_使⽤spyder3调试python程序
的简明教程
说是简明教程,其实是我⾃⼰尝试⽤spyder调试python程序的过程的⼀个记录,因为spyder的调试功能是基于pdb,⽽我⼜没有pdb的基础,所以刚开始上⼿时感觉很不习惯,⽽且那时我⼜很懒,没去官⽅⽂档,仅仅在百度和csdn上了,没到⽐较好的资料,于是放弃了,过了⼀段时间之后,突然⼜⼼⾎来潮去了官⽅⽂档,外加⾃⼰的⼀些尝试,总算⼊门了spyder的调试功能,特地记录下来与⼤家共享,我使⽤的spyder版本是3.1.4(使⽤pip list命令查看spyder版本)
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的⽅式运⾏该代码试试
debug
点击spyder⼯具栏上的Debug file按钮,或者使⽤快捷键Ctrl+F5开始调试。
在ipython界⾯会输出如图所⽰的内容:
first debug
出现了ipdb提⽰符,说明我们已经进⼊了调试模式,上⾯输出的内容可以看出是代码的第⼀⾏,接着在提⽰符中输⼊c(continue的缩写,表⽰程序继续向下执⾏到下⼀个断点),会输出如下内容:
first_debug_end
程序执⾏结束,可见即使我们没有打断点,仍然会在第⼀句执⾏之前中断(经测试,中断的时候第⼀句还没有执⾏),这个和我⽤过的其他编译器不太⼀样(⽐如eclipse和IntelliJ,在不打断点的情况下会正常执⾏到底),⼀开始还让我困惑了⼀下,后来就适应了.
如果你仔细看刚才的⼯具栏截图的话,会发现在debug按钮组的第五个按钮和刚刚的'c'命令是⼀样的功能,但是不知道为什么,在我这个版本的spyder⾥有这个按钮⼀些bug(具体来说就是在程序执⾏结束之后不会⾃动退出pdb,⽽且之后再想使⽤'q'命令退出也退出不了,换⽽⾔之,就是卡死在了pdb⾥⾯),如果你使⽤的是更⾼版本的spyder的话,这个bug可能已经修复了,可以尝试⼀下.
打断点的两种姿势
普通的breakpoint
⽤spyder打断点的⽅法⾮常简单,只要在想打断点的那⼀⾏⾏⾸双击⿏标即可,如图所⽰,我们尝试建⽴⼀个断点:
break_point
在每次开始debug之前,先在spyder的ipython界⾯中输⼊%reset 把⼯作空间的所有变量清除,以免影响到我们接下来的测试.
按下Ctrl+F5开始debug,进⾏如图所⽰的操作:
to_breakpoint
然后我们就到达了断点处,从箭头(-->)以及d:\ide\pyproject\pdbtest\test1.py(12)() 中的数字12可以看出程序刚刚执⾏到了第12⾏(也就是我们打断点的这⼀⾏),第12⾏到底有没有执⾏呢?只要测试⼀下f变量是否存在就可以了,尝试在ipdb中进⾏如下输⼊:
ipdb
!(python语句)的意思就是在当前状态下执⾏该python语句,我刚刚的⽤法的意思显然是查看变量内容,从!f 的错误信息可以看出f尚未定义,即第12⾏代码(f='f')还没有执⾏,查看e变量发现e变量已经被定义了,这说明第11⾏已经执⾏结束了。通过以上实验可以看
出,spyder会在断点语句的执⾏之前中断
带条件的breakpoint
双击刚刚在第12⾏代码开头创建的“⼩红点”即可取消断点。
continue语句执行过程按住Ctrl+Shift,然后像刚才⼀样双击第12⾏⾏⾸,会弹出⼀个⼩框:
condition
在这个⼩框内可以输⼊断点的条件,可以是任意返回True或False的python语句,⽐如我输⼊
(a==4)and(b==5)
然后点击OK按钮,发现⼩红点上多了⼀个问号,这个表⽰条件断点(conditional breakpoint),开始debug试⼀下.
debug
发现程序只在第⼀句中断⼀下,断点根本就没有起作⽤,因为在断点的时候,a变量为'a',b变量为'b',不符合条件当然不会中断.
现在重新开始debug,然后连续按三遍Ctrl+F10,然后发现程序执⾏到了第⼗⾏:
ctrl_f10
其实Ctrl+F10是单⾏执⾏的意思,每按⼀次执⾏⼀⾏,相当于点击了⼯具栏上如下图所⽰的按钮:
run_current_line
这个时候我可以使⽤刚刚讲过的!(python语句)来给a,b临时指定⼀个值,在ipdb的提⽰符中输⼊!a=4;b=5 ,然后使⽤c命令继续执⾏,发现在条件断点处中断了,因为此时满⾜了我们刚刚给条件断点指定的条件:
condition_break
如果忘记了条件断点的条件是什么的话,可以按住Ctrl+Shift键双击“带问号的⼩红点”,然后就能看见条件是什么了,⽽且还可以修改条件,如果要取消断点的话,直接双击就可以了。
总结⼀下刚刚所讲的
Ctrl+F5 以Debug模式运⾏⽂件
在debug之前记得⽤%reset 指令清空⼀下ipython⼯作空间中的变量,以免影响debug中变量值的查看
⽆论你是否打断点,都会在第⼀⾏语句执⾏之前中断⼀次
!(python语句)可以在pdb提⽰符下执⾏python语句,可以⽤来查看变量值或者给变量临时指定值
c命令或者Ctrl+F12可以让程序执⾏到下⼀个断点
q命令退出调试
Ctrl+F10 单⾏执⾏
双击⾏⾸设置断点,按住Ctrl+Shift 双击⾏⾸可以设置条件断点
剩下的⼀些细节
上⾯的例⼦已经包括了⼤多数常⽤的功能,如果曾经⽤过别的编译器的调试功能的话(如eclipse和Intell
iJ等),看到这⾥就可以了,对于有调试经验的⼈来说,我下⾯要讲的两个功能只要看到按钮的名称就⼤概知道它是做什么的了.
如下:
step_into
return
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() 这句时注意⼀下:
not_step_into
不管myTest()中有多少代码都直接当做⼀⾏跳了过去,⽤q命令退出调试。
重新debug该⽂件,单⾏执⾏到c = myTest() 这⾏时按Ctrl+F11 使⽤Step Into功能,发现我们进⼊了函数内部的代码段:
step_into
这就Step Into的主要功能.
Return
Return的功能与Step Into的功能刚好相反,当使⽤Step Into进⼊函数之后,按Ctrl+Shift+F11 后会直接跳到该函数的执⾏的最后⼀⾏,此时在按⼀遍Ctrl+Shift+F11 或者Ctrl+F10 (单⾏执⾏)就可以跳出函数了,想要尝试的话可以⾃⾏在我上⾯给出的例⼦中尝试.
End
感谢阅读,希望世界上的bug越来越少(⼿动滑稽)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。