在 IDEA 中使用 Debug,简直太爽了![亲测有效]

idea (62) 2023-03-25 13:05

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说在 IDEA 中使用 Debug,简直太爽了![亲测有效],希望能够帮助你!!!。

1. Debug 简介

为何要用 Debug?

眼看 12 月马上就要过去了,张三正在大学宿舍床上躺着,此刻的他既开心又发愁。

开心的是马上就能和女朋友一起跨年了,发愁的是自己 java 期末大作业一堆错误。

张三英语不好,看不懂控制台的报错语句,所以越想越烦躁。

突然,张三好像有了灵感,打开 IDEA 兴奋地敲了起来。正参与五黑的室友见状,不免有些好奇,都跑去看他的电脑:

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第1张

原来张三正在复制粘贴一堆打印语句。一室友实在看不下去了,问他:“你调试程序为啥不用 Debug ?”

“你写这么多 system 语句,不麻烦吗?最后交作业,你还要把这些打印语句一个个都删掉,太浪费时间了。”

所以我们写程序不要一遇到问题就写一堆 system 打印语句,真的很浪费时间。

而使用 Debug 可以追踪程序的执行过程,快速定位程序异常的位置,帮助我们快速找到出错的代码。

2. 开启 Deubg

2.1 Debug 模式下的界面

我们先看下 IDEA 中 Debug 模式下的界面:

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第2张

    1. 以 Debug 模式启动服务。在开发中,我一般会直接以 Debug 模式运行程序,方便随时调试代码。
    1. 断点,我们可以在行数栏左侧直接单击设置,也可以使用快捷键 Ctrl+F8 设置或者取消断点。
    1. Debug 窗口:当请求到达第一个断点后,Debug 窗口会被激活。
    1. 调试 Debug 按钮:我们在调试过程中主要使用这几个按钮,鼠标悬浮按钮上面可以显示快捷键。
    1. Debug 服务按钮:在这里我们可以开启、关闭 Debug 服务等。
    1. 方法区:这里会显示调试过程中执行的方法。
    1. 参数区:这里会显示当前断点前所有参数的值。

2.2 开启 Debug

先设置一个断点,然后以 Debug 模式运行:

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第3张

注:我们还可以在执行程序的过程中添加/删除断点。

3. Debug 中常用调试按钮

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第4张

3.1 跳转到当前执行代码的行

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第5张

我们先在一个页面设置一个断点,然后再切换到其他页面,点击这个按钮,发现又跳转到了执行代码所在的行:

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第6张

3.2 步过

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第7张

步过就是一步一步往下走,跳过所有方法:

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第8张

上面的例子中即便是遇到了 system 打印方法和 test1 方法,也会跨过去继续往下执行。

3.3 步入

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第9张

在执行的过程中如果遇到了自定义的方法,可以进入方法内部,不会进入 JDK 类库中的方法。

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第10张

上面的例子中,遇到了 system 方法会自动跨过去,但是遇到了自定义的方法,则会进入到方法中执行,等执行完则会返回到方法的调用处。

3.4 强制步入

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第11张

不管遇到 JDK 的类库方法还是自定义方法,都会进入到方法中执行。

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第12张

上面的例子中不管遇到了JDK 类库中的 system 方法还是自定义的 test1方法,都会进入到方法中执行。

3.5 步出

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第13张

步出就是从进入的方法内部退回到方法调用处。

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第14张

上面的例子中我们进入到了 test1 方法的内部,当点击步出按钮后,又回到了调用 test1 方法的地方。

3.6 回退断点处

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第15张

回退断点处意思就是可以回退到指定方法的调用处。

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第16张

上面的例子中我们依次执行了 test1、test2、method2 方法,但是我们可以选择直接回退到 test1 方法的调用处。

步出和回退断点的区别:

  • 都是回到方法的调用处
  • 步出只能回到当前方法的调用处
  • 回退断点可以回到指定方法的调用处,前提是该方法已经被执行过。

3.7 定位到光标处

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第17张

如果我们写的代码有几百行,一步一步往下执行也比较费时间。这时候我们可以先把光标放到一个指定位置,然后点击定位光标处按钮,这时候代码就会立即执行到光标处了。

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第18张

上面的例子中我们把鼠标光标移动到了下面某一行,然后点击定位光标处按钮,代码立刻执行到了这一行。

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第19张

3.8 计算表达式

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第20张

计算表达式可以帮助我们计算一些表达式的返回值。

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第21张

从上面的例子中可以看出,我们可以在调用某些方法之前使用一些自定义参数去计算该方法的返回值。

4. 查看参数

4.1 参数所在行后面显示

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第22张

4.2 光标悬浮查看

光标悬浮到参数上,显示当前变量的信息,我经常使用这种方法,特别方便。

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第23张

4.3 在 Variables 里查看

这里显示当前方法里的所有变量。

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第24张

4.4 在 Watches 里查看

在 Watches 里,点击 New Watch,输入需要查看的变量:

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第25张

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第26张

5. 条件断点

有时候我们代码中会包含很多 for 语句,但是使用断点调试的时候会执行很多次。这时候我们可以选择断点,鼠标右键设置一个条件,只有满足该条件时,断点才会执行到此处。

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第27张

上面的例子中我们给断点设置一个条件:i==50,所以以 Debug 模式运行该程序的时候我们发现此时 i 就是50。

6. Debug 服务设置按钮

6.1 执行到下一个断点处直到结束

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第28张

该按钮的作用:如果下面有断点,就跳转到下一个断点处。如果没有,程序就执行结束。

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第29张

6.2 断点静音

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第30张

有时候我们在执行到某一步的时候已经知道了结果,但是后面还有一堆断点。我想让这些断点失效,但是第二次跟踪我还想用这些断点,这时候就可以使用断点静音

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第31张

6.3 查看/清除断点

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第32张

我们在执行完代码后要清除所有断点,但是一个个去清除太浪费时间,这时候就可以使用这个按钮查看所有设置的断点,或者清除所有断点。

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第33张

6.4 返回到第一个断点的地方

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第34张

代码执行到某一行想返回到第一个断点处:

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第35张

7 多线程调试

因为 CPU 执行线程的顺序是随机的,但是我们使用断点调试可以自定义执行下一个线程。

首先将两个线程的断点都设置成线程模式:

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第36张

然后在方法区选择指定的线程去执行:

在 IDEA 中使用 Debug,简直太爽了![亲测有效]_https://bianchenghao6.com/blog_idea_第37张

发表回复