IntelliJ IDEA 高级调试技巧及多线程调试技巧

一、条件断点
二、回到"上一步"
三、多线程调试
四、远程调试
五、临时执行表达式/修改变量的运行值

条件断点

条件断点就是当满足某个条件(通常是表达式)时,debug断点才会生效;这在循环中debug是非常有用的;例如我们想要在循环体中调试:当某个变量满足某个条件时,需要断点调试,来查看详细的执行流程及变化情况。
我们说过,IDEA中的debug功能是非常强大的,要使用条件断点也非常简单,下面这张图片中 Condition中的内容代表当name为eamon:23时,程序执行到断点处停下来。在断点的红原点处右击一下就会弹出该框。
在这里插入图片描述

回到上一步

在这里插入图片描述
或者你也可以在下图中找到 Drop Frame:在这里插入图片描述
在IDEA中,所谓的回退,叫 Drop Frame,选择Drop Frame后,程序会跳转回调用当前这个方法的地方,当然已经改变的值是不会恢复的。但是当该方法再次被调用时,你可以观察到某个变量什么时候被改变,至少我们不用再去重新运行一遍程序。
注:好奇心是人类进步的阶梯,如果想知道为啥这个功能叫Drop Frame,而不是类似Back To Previous 之类的,可以去翻翻JVM的书,JVM内部以栈帧为单位保存线程的运行状态,drop frame即扔掉当前运行的栈帧,这样当前“指针”的位置,就自然到了上一帧的位置。

多线程调试

在idea中的进行调试时,代码中有多线程,想对线程中的代码进行跟踪,代码如下:

        for (int i = 0; i < 5; i++) {
            final int index = i;
            executorService.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println(index);
                }
            });
        }

在以上代码中打了三个断点,如下:
在这里插入图片描述

原来debug是分级别的:all, thread在这里插入图片描述
默认是all,然后只会debug到本线程的断点,修改成thread就可以swap Thread 来debug了

注意:千万要注意,如果想进入Thread Debug,就必须所有的断点都是Thread 类型的,否则还是进不去,如我在断点1用的是All
在这里插入图片描述
断点2和断点3用的是Thread类型,会发现断点3根本就进不去。。。如果进去了的话,就会出现如下提示在这里插入图片描述
可以进行进程切换

在这里插入图片描述

远程调试

本机不用启动项目,只要有源代码,可以在本机直接远程调试服务器上的代码,打开姿势如下:

4.1 项目启动时,先允许远程调试

 java -server -Xms512m -Xmx512m -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9081 -Djava.ext.dirs=. ${main_class}

起作用的就是

扫描二维码关注公众号,回复: 13099271 查看本文章
-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9081

注意:远程调试从技术上讲,就是在本机与远程建立scoket通讯,所以端口不要冲突,而且本机要允许访问远程端口,另外这一段参数,放要在-jar 或 ${main_class}的前面

idea中设置远程调试在这里插入图片描述
然后就可以调试了在这里插入图片描述
前提是本机有项目的源代码 ,在需要的地方打个断点,然后访问一个远程的url试试,断点就会停下来

临时执行表达式/修改变量的运行值

调试时,可以临时执行一些表达式,参考下图:点击这二个图标中的任何1个都可以在这里插入图片描述
点击+号后,就可以在新出现的输入框里输入表达式,比如i+5在这里插入图片描述
然后回车,马上就能看到结果在这里插入图片描述
当然,如果调试时,想动态修改变量的值,也很容易,在变量上右击,然后选择Set Value,剩下的事,地球人都知道
在这里插入图片描述

总结

善用上述调试技巧,相当大家撸起代码来会更有感觉。

猜你喜欢

转载自blog.csdn.net/qq_40093255/article/details/115177712