说是简明教程,其实是我自己尝试用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行代码开头创建的“小红点”即可取消断点。

按住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和IntelliJ等),看到这里就可以了,对于有调试经验的人来说,我下面要讲的两个功能只要看到按钮的名称就大概知道它是做什么的了.

如下:

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越来越少(手动滑稽)

spyder(python3.7)使用教程_使用spyder3调试python程序的简明教程相关推荐

  1. spyderpython使用教程_使用spyder3调试python程序的简明教程

    说是简明教程,其实是我自己尝试用spyder调试python程序的过程的一个记录,因为spyder的调试功能是基于pdb,而我又没有pdb的基础,所以刚开始上手时感觉很不习惯,而且那时我又很懒,没去找 ...

  2. pythondebug教程_使用spyder3调试python程序的简明教程

    说是简明教程,其实是我自己尝试用spyder调试python程序的过程的一个记录,因为spyder的调试功能是基于pdb,而我又没有pdb的基础,所以刚开始上手时感觉很不习惯,而且那时我又很懒,没去找 ...

  3. 量化投资python教程_零基础入门Python量化投资全套教程,30+经典教材打包送!暑期get新技能就靠它了!...

    量化投资是指使用数理分析.编程.建模等方式,通过对样本数据进行集中比对处理,找到数据之间的关系,制定量化策略,并使用编写的软件程序来执行交易,从而获得投资回报的方式. 在如今的量化投资领域,已经有了无 ...

  4. python gdb调试_使用GDB调试Python程序

    最近在为一个监控系统开发agent,需要支持Linux.FreeBSD及Windows等操作系统.复杂的线上环境,带来了一系列诡异的问题,尽管代码上线前在为数不少的测试机器验证过. coredump文 ...

  5. pythonweb搭建教程_基于Centos搭建Python Web 环境搭建教程

    CentOS 7.2 64 位操作系统 安装 setuptools 工具 安装 因为之后我们需要安装 Django ,而 Django 需要用这个工具,所以我们需要先安装 setuptools 工具. ...

  6. python基本原理概论_优学院《2020年马克思主义基本原理概论题库(高职类)》查题教程2020高校邦《Python程序设计基础【实境编程】》答案完整...

    优学院<2020年马克思主义基本原理概论题库(高职类)>查题教程2020高校邦<Python程序设计基础[实境编程]>答案完整 更多相关问题 专业职业是相对以下哪点而言的(). ...

  7. python学法用法 自动刷分_微信跳一跳python辅助工具刷分教程详解

    随着身边不少小伙伴都加入了微信跳一跳挑战,朋友圈最近都被刷爆了,为了刷分,很多小伙伴都开始开挂了,Github大神wangshub分享了一个针对该游戏的开源项目,那微信跳一跳python怎么刷分呢,下 ...

  8. python辅助脚本教程_微信跳一跳python辅助脚本实例分享

    本文主要为大家整理了关于微信跳一跳的辅助脚本内容,这次我们给大家整理的是关于python的脚本内容,一起来学习下. 这段时间微信跳一跳这个游戏非常火爆,但是上分又非常的难,对于程序员来说第一个念头就是 ...

  9. mobx中跟新了数据视图没变化_【第1781期】MobX 简明教程

    前言 SEEConf,2020年1月4号杭州见,C位抢票见文章末尾.今日早读文章由腾讯@whinc投稿分享. 正文从这开始-- 导读:MobX 是一个优秀的响应式状态管理库,在流行的状态管理库 Red ...

最新文章

  1. 从零开始_学_数据结构(六)——排序(冒泡、插入、希尔、简单选择、归并、快速)...
  2. UIMenuController的简单使用
  3. Q767 重构字符串
  4. 1.13 梯度检验-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  5. Hive SQL子句中 group by 1 是什么意思?
  6. 不一样的 SQL Server 日期格式化
  7. 谈谈IP和MAC捆绑的破解之道
  8. 自学python编程笔记本推荐-python自学教程 | 3万字为你详解每个重要知识点
  9. C# Thread.Sleep 导致内存溢出,在多线程里Sleep的真实情况 软件闪退 内存溢出
  10. GB28181国标视频平台录像存储录像回放解决方案
  11. ibm服务器远程管理口 口令,IBM X系列服务器|IMM2设置远程管理口|默认IP
  12. 新视野大学英语视听说听力:passage12原文及答案(前四单元)
  13. VBA和Excel学习记录
  14. lightoj1138
  15. Window10系统安装V-rep教程
  16. Matlab读取CSV文件,并进行矩阵处理
  17. 破解加密光盘五法破解加密光盘五法
  18. 自定义水印相机(watercamera)
  19. 区块链下的保护个人信息安全武器
  20. 黑客发展历史和大事记

热门文章

  1. 最隐秘的医疗数据,如何通过区块链流转?
  2. vivo怎么升级到android最新,终于等到你!vivo公布安卓7.1升级计划,新老机型都有份!...
  3. 【队内胡策 11.1】 T1 T2
  4. 遥感大数据深度学习变化检测
  5. 记一次文件转码与二进制查看学习
  6. 微信浏览器 WeixinJSBridge API
  7. Kafka过期数据清理
  8. Nexus 5X线刷教程
  9. 163 smtp port
  10. CSDN更换博客皮肤教程