通常在用Python写一个项目时80%的时间是在调试代码,学会如何Debug能够帮你快速定位问题在哪及拿出解决方案,因此学会Debug能够让你事半功倍。下面就使用Pycharm Debug功能做些简单介绍。
1 设置断点
如下图,在pycahrm的界面中写了Pycharm_debug_test.py文件,在某处代码行(你需要停顿的位置)只要用鼠标点击图中的位置,出现一个红点,那么debug就会停顿在这,再次对着红点鼠标点击一下,红点会消失。需要停顿的位置可根据自己的调试需求自行更改。
图1 设置断点
2 开始调试
按照图2的操作进入debug,程序下方弹出图2 b) 的界面。
图2 a) 进入debug
图2 b) 进入debug
根据图3 发现前面两行已经运行完,相应的变量已经在debug的界面显示,程序停在了第3行。
参考图片
图3 debug界面
3 Debug调试(核心)
这一步是调试的精髓。通常程序出bug是因为变量的类型不对,导致出现问题,但又不知道哪出现问题,下面这一步可以让你在debug中交互,做些运算,了解类型等操作。
按照图4的点击顺序进入debug交互界面。Console -> Show Debug Console, 界面出现In[2]:,我们就可以在里面做运算啦。
图4 debug交互界面
笔者做了如下运算,了解b的类型,b与c做了乘法,发现都能Out正确的值。
图5 Debug 交互界面
当然,以上的debug交互所用到的变量只能用到第3行之前的变量,因为debug停在了第3行(注意第3行没有运行),见图6输出a会报错
图6 输出a
那如何进行下一步呢,我们看到debug界面还有如图7的5个小图标
图8 Step Over
Step Over :进行debug到下一行,步进,只能一步一步的到下一行。
图9 Step Into
Step Into:进入函数里面
图10 Step Into My Code
Step Into My Code:调试过程中想跟着代码一步步走下去,可以一只按F7(Step Into)
,有时就会调到源代码里去执行,此时通过Step Into My Code
可以让debug
回到自己的代码并继续向下执行。(相当于跳过函数包,因为函数包都是打包好的,可以正常放心使用的代码)
图11 Step Out
Step Out: 跳出函数
图12 Run to Cursor
Run to Cursor:不步进,直接跳到下一个最近的红点(游标),即你设置的下一个的断点
我的理解:从一个断点跳到下一个断点,是调试者可以大致判断代码出现问题的地方在两个断点之间的这块“区间”,从而可以提高dug的效率。
4 小节
调试方式总结见下表
调试方式 | 快捷键 | 意义 |
Step Over | F8 | 调试一行代码,不进入子函数;如果没有子函数,功能与Step Into一样 |
Step Into | F7 | 单步执行,进入子函数 |
Step Into My Code | Alt + Shift + F7 | 调试过程中想跟着代码一步步走下去,可以一只按F7(Step Into),有时就会调到源代码里去执行,此时通过Step Into My Code可以让debug回到自己的代码并继续向下执行 |
Step Out | Shift + F8 | 运行断点后面所有代码;当单步执行到子函数内时,用step out就可以执行完子函数余下部分,并返回到上一层函数 |
Run to Cursor | Alt + F9 | 一直执行,直到光标处停止;用在循环内部时,点击一次就执行一个循环 |
PS:
我的理解:使用debug进行调试,目的就是如何快速排查问题。如果上百行的代码出现bug,但不知道问题在哪,这时候可以使用debug进行调试,使用二分法,快速缩小问题所在范围,可以快速找到问题所在。