对于 bug 铺天盖地的 Python 程序,该如何高效的调试?
pdb 是 Python 自带的库,为 Python 提供了一种交互式的源码调试功能,包含当前调试器应有的功能,包括设置断点、单步调试、查看源码等。其实如果你之前学过 C/C++ 的话,你可能知道 gdb 这个命令行调试工具,如果你之前用过 gdb,那么恭喜你你可以直接用 pdb 了,因为两个用法是一样的。
其实还有一个开源的 Python 调试器 -- ipdb,它和 pdb 的接口是一样的,但是 ipdb 相比于 pdb 多了语法高亮,tab 自动补全等友好功能,在易用性方面做了很大的改进,这个感觉就和 Python 和 IPython 一样。
关于 pdb 调试和 ipdb 调试的用法,我在以前的文章中也写过,感兴趣的可以看一下:
0x01 断点 + 单步调试
这个更多的是在图形界面下的调试,很多 IDE 都支持 Python,调试功能都很完善,这里我主要介绍在 Pycharm 下的调试,毕竟 Pycharm 可以说是当前最好用的 Python IDE。
断点
在断点这个地方,主要分为两步:「找断点」和「打断点」。
找断点,就是你想调试的代码块的第一行代码即可,也就是一个断点接足够了,找到以后就可以打断点了。可能有同学就有这么一个问题:
我都不知道是哪部分出了问题,我哪知道我要调试哪段代码?
好像有点道理,不要慌,问题不大。首先你在关键的代码位置上 print,然后通过分析 print 的值来缩小范围,当然这个过程你要稳住,可能需要重复多次,一般这样就可以将范围缩小到一个比较完整的功能代码块中,然后就打断点好了。
所以知道为啥叫“打”断点了吧,谁让它那么难找...
下面来说打断点的方法,就是单击目标代码的行号右边空白处,然后出现一个红红的圈,就证明打断点成功了,请看下图:
单步调试
断点打完了,那么就该「单步调试」了。
调试的方法非常简单,就是在当前的 py 文件内部点鼠标右键,单击“Debug xxx”(xxx 是 py 文件名):
此时 Pycharm 会调出一个控制台,这个控制台大概分为显示内容的区域和工具区域:
其中工具区域有两个面板:Debugger 和 Console。对于 Debugger 面板,它的内容是在内容区域显示,显示的为程序执行过程中的变量及细节;Console 面板则是输出数据显示的位置。
对于我们的代码,如果到调试状态,该行代码就处于一个冻结的状态,在点击"按步操作"之后,才会一行一行代码执行。
主要用到 Step Over 这个按钮:
然后我们继续单击 Step Over 按钮,一直到最后一步:
然后你会在 Debugger 面板内看到所有的变量及其值和类型,然后我们再来单击 Step Over 按钮,让我们来看一下发生了什么:
课程:《Python3 入门课程》
课程介绍:本课程学完,你将可以掌握Python3的基础知识;掌握Python3的应用技巧;为学习Python3其他技术打下坚实基础等。
课程特点:
90+知识点图文呈现,为理解服务;
90+随堂练习,践行在“做”中“学”;
代码块案例丰富,讲练结合。
学习方式:扫码 ↓ 立即前往课程界面~