Python 程序如何高效地调试?

Python在debug方面的支持仍是不错的,在明确代码意义的状况下,经过log、print和assert分析错误缘由,配合单元测试能够很高效。然而,实际工做中大量代码极可能出自他人之手,这种状况下,使用debugger就显得更加高效了。python

 

 

 

 

1、在控制台下进行程序调试shell

 

PDB服务器

 

若是你熟悉命令行调试工具(例如gdb、lldb),那么使用Python中的PDB将得到很是好的体验,PDB不只支持项目启动时进行调用,也支持在Python shell中交互式调试;功能上,支持断点、步进、异常捕获和解决、变量查看、变量改写、栈查看甚至字节码查看等。框架

 

举个PDB断点调试的例子:编辑器

用文本编辑器新建一个文档,就命名为debug1.py吧,输入最简单的Python代码片断:函数

import pdb
a = "a string"
b= "b string"
pdb.set_trace()
print("next step")

而后运行这个脚本,Windows下面这样运行 :工具

python debug1.py

而后执行到pdb.set_trace()这句后会自动进入断点调试模式,屏幕会显示相似的信息:性能

> c:\users\david\documents\debug1.py(5)<module>()
-> print("next step")
(pdb)

PDB显示目前的断点位置,而后你就可使用PDB调试命令了。单元测试

 

 

 

 

Tips:其余经常使用命令有:开发工具

pp,打印

n,下一步,执行下一步

s,步进,一步步的执行

l,列出,显示断点周围的源代码

c,继续,继续程序的运行

r,返回,继续直到当前函数返回

 

由PDB引入的VIM、Emacs工具都能很好地实现相似lldb和gdb的效果。同时,结合IPython这一扩展功能shell,其中的魔法命令可以更好地帮助程序调试。这是通常*nix环境下常见的调试组合,配合配置良好的文本编辑工具都能实现不错的类IDE体验。PDB更能进行远程调试,即对远端(如服务器上正在运行着的Python代码)进行调试。几乎全部的debugger工具都是在PDB的功能基础上进行用户界面上的提高。

 

此外,对于部分框架,尤为是Web框架,进行调试每每须要结合具体的上下文环境(例如Django的开发调试测试须要上下文环境等),PDB交互式调试能够直接挂载在对应的交互环境中(如Django shell)。

 

Pudb

 

若是你以为这样太原始,那么能够尝试pudb,它是基于控制台的debug图形化debugger工具,稍微比pdb直观一点,但仅能够在Linux下运行。

 

 

这个图形界面有点原始,不支持鼠标,因此不要用鼠标点。

 

 

2、图形界面下的程序调试

 

若是你更习惯于IDE的总体调试,也没有问题。不少支持Python的IDE,调试功能都十分强大,甚至轻量级编辑器也都具有完善的调试功能。接下来简单介绍几款图形化的IDE工具:

 

Visual Studio Code

 

VSC做为一个跨平台的重量级文本编辑器以及轻量级IDE,现在已经获得了愈来愈多开发者的喜好,而Anaconda做为Python发行版集成环境,已将VSC做为推荐开发工具。

 

 

 

 

VSCode量级较轻,但只须要安装一个Python语言支持工具,摇身一变就能成为全功能Python IDE,智能感知、补全、重构、查找定义代码段等编辑功能包罗万象,并且调试功能也十分完整,能在调试模式中涵盖PDB的所有功能,并能在图形界面下简单地进行操做。

 

若是非要说一个VSCode的弱点的话,应该是其调试工具、解释器的配置没有具体的配置页面,须要经过配置文件来进行修改,这一点或许会给新手带来困惑。

 

Visual Studio

 

VS号称宇宙第一IDE,其Python开发工具天然也能带来很是好的体验。在VS2017中,Python开发环境就已是可选择的安装选项了。对于许多曾经使用VS在Windows下进行其余语言开发工做的人而言,熟悉的快捷键、清晰的环境及不会特别夸张的资源消耗绝对是VS的加分点。

 

 

 

 

固然,其debugger功能也是包罗万象的。

 

Spyder

 

做为开源社区贡献的由Python编写的跨平台IDE,Spyder以轻量、便捷、高度集成为卖点。Spyder容许在多种不一样的预设模式下工做,例如相似Matlab式的科学计算交互界面,以及其余应用工程开发形式的界面环境;在编码过程当中Spyder可实时提示文档、交互式运行、调试时显示所有变量表,并可一键可视化等,对于数据分析而言具备很好的便利性;一样,它也支持步进跟踪等一系列PDB所提供的调试功能。如果说缺点,界面自己不具时尚感,算吧?

 

 

 

 

Eclipse + PyDev

 

Eclipse是最辉煌的开源跨平台多语言IDE之一,有着大量用户的簇拥,天然它也为Python提供了支持。PyDev是Eclipse上的Python开发工具包,提供完整IDE功能,也包含所述的断点、步进等调试功能,Eclipse + PyDev多是最完整的开源Python IDE解决方案。

 

 

 

 

PyCharm

 

或许每个Python开发者对于PyCharm都不陌生,做为目前最好用的Python IDE,PyCharm保持着一个季度一更新的版本迭代频率,每次更新都能带来功能上的惊喜,而且不管你是数据分析、应用开发者抑或是服务端开发,PyCharm都能提供最好的体验。它是最智能的IDE,可以经过你引用的模块推断提醒你是否须要进入科学计算模式;可以解析代码中存在的其它语言片断(如字符串中的SQL、HTML、JS等);能够结合Jupyter Notebook进行开发和展现;可以经过代码生成UML图,包含图形化的单元测试、覆盖率分析、性能分析工具和并行分析工具;可以远程调试、一键部署,能深刻结合各类常见框架提供更好的支持;也能方便地进行图形化debug。

 

PyCharm的缺点?应该是在设置好解释器后,PyCharm将会对环境中全部的site-package进行解析和抽取,以供智能感知自动补全使用,在这期间IDE对内存和CPU的占用都很是大,但如若您的电脑用一块高速SSD做为硬盘,同时又有足够大的内存,一切便会显得很是完美。

 

 

 

 

与Visual Studio相似,PyCharm是商业软件,虽然它也提供了免费的社区版,但相比之下,社区版的PyCharm受限的功能较多。不过,若是你仍是一名学生,即可以利用本身的教育邮箱申请免费的教育版学生受权,体验与Pro版一致的所有功能。叉车配件

相关文章
相关标签/搜索