工欲善其事,必先利其器。无论你的 IDE 是 IntelliJ IDEA、Pycharm、WebStorm、GoLang、还是PhpStorm ,调试器都是标配。在遇到有问题的程序时,合理的利用调试器的跟踪和断点技巧,可以很快的定位出问题原因。下面让我们以 Pycharm 为例,一起来系统的学习下 IDE 的调试技巧吧。

01.Debug 运行方式

在代码所在行号处左击鼠标,就会设置一个行断点。点击 Pycharm 右上角的小虫子图标按钮,就会以 DeBug 的方式运行代码。下面是 DeBug 工作界面的简单介绍。

pycharm debug使用docker环境 pycharm的debug的使用_调试器

 

 

02.菜单按钮功能介绍

平常 Debug 代码,常用到的一些调试按钮如下,蓝颜色的字体是按钮的名称:

pycharm debug使用docker环境 pycharm的debug的使用_计算表达式_02

 

 


1).Resume Programe:恢复程序,比如,你在第 12 行和 16 行有两个断点,当前运行至第 12 行,按 Resume Programe ,则运行到下一个断点(即第 16 行);

pycharm debug使用docker环境 pycharm的debug的使用_计算表达式_03

 

2).Step Over:

一行一行地往下走,如果这一行上有方法, 不会进入方法。例如下面第 17 行代码有自己的实例方法,点击 Step Over 按钮调试代码就不会进入这个实例方法。

pycharm debug使用docker环境 pycharm的debug的使用_计算表达式_04

3).Step into:

强制步入,能进入任何方法,查看底层源码的时候可以用这个进入官方类库的方法。

4).Step Into My Code

为单步进入,如果当前行有自定义的方法,会进入方法内部,但不会进入官方类库的方法,效果如下:

pycharm debug使用docker环境 pycharm的debug的使用_实例方法_05

 

03.常用的 DeBug 小技巧

1).断点条件调试

有这样一个场景,代码 DeBug 的时候,我想知道下面代码 index 为 10 时, date_1的值是什么,正常来说要 代码 DeBug 循环 10 次,很不方便。

pycharm debug使用docker环境 pycharm的debug的使用_调试器_06

 

 

在 IDE 中有个条件断点,只需设置好变量条件,只有当某个变量等于你设置的条件的值时,断点就会自动停下。首先右击第 24 行的断点,给 Conditon 设置变量条件 index == 10,并点击 Done 保存设置。

 

pycharm debug使用docker环境 pycharm的debug的使用_计算表达式_07

 

 

 

当 index 的值为 10 时,DeBug 就会自动停下,效果如下图:

 

pycharm debug使用docker环境 pycharm的debug的使用_调试器_08

 

 

 

2).计算表达式

当我们 Debug 某个方法时,有时候会忘了传入某个参数或者传错了,这个时候又不想重新Debug,就可以通过计算表达式来设置某个变量的值,如下图,发现 day_int = 367 不是期望的值,可以鼠标右击下面蓝色的 day_int , 选择 Set Value, 对 day_int 临时修改值

pycharm debug使用docker环境 pycharm的debug的使用_调试器_09

 

 

下面的代码程序会根据重新赋的值向下运行,可以看到变量 num_30 的值是 200 整除 30 的结果。

 

pycharm debug使用docker环境 pycharm的debug的使用_调试器_10

 

 

 

3).多线程调试

有时候发现对多线程并发代码无法调试, 并不会所有断点都走到,代码中 87 行的 args 里的变量给了 6个 值,线程并发数量设置为 3 个,第 71 行的断点调试我只循环了 2 次,正常来说应该循环 6 次,如下图:

pycharm debug使用docker环境 pycharm的debug的使用_实例方法_11

出现上面的情况是因为 IDE 在 Debug 时默认阻塞级别是 Thread,解决办法是将它的阻塞级别改为 All, 阻塞其它线程,只有在当前调试线程走完时才会走其它线程。配置方法是右击断点,Suspend 的值改为 All ,再点击 Make Default, 最好点击 Done 保存设置。

 

pycharm debug使用docker环境 pycharm的debug的使用_计算表达式_12

 

 

 

修改后运行的效果如下:

pycharm debug使用docker环境 pycharm的debug的使用_实例方法_13