条件断点

循环中经常用到这个技巧,比如:遍历中,想让断点停在某个特定值。

java 使用idea检查线程信息 idea查看线程数_多线程


见上图,在断点位置,右击会弹出一个界面,在condition中填写断点条件,在调试的时候,断点会自动在断点条件,i ==6 为 true时候停下,跳过为false的条件。

java 使用idea检查线程信息 idea查看线程数_java 使用idea检查线程信息_02

回退上一步

针对调试中一不小心错过想要查看的方法,想要重新进入刚才的断点方法,适合使用方法套方法的场景

java 使用idea检查线程信息 idea查看线程数_java 使用idea检查线程信息_03


参考上图,method1方法调用method2,当前第25行断点 ,点击下图红色箭头位置的Drop Frame图标后,瞬间回到了上一个method1

java 使用idea检查线程信息 idea查看线程数_多线程_04

java 使用idea检查线程信息 idea查看线程数_远程调试_05

多线程调试

多线程调度顺序完全没法控制,依赖CPU的调度,如何调试多线程,避免多线程之间调试的相互影响减少多线程调试的难度

java 使用idea检查线程信息 idea查看线程数_java_06

在上述3个断点处,点击右键弹出一个节目,在 suspend 上选择 Thread,即可进行线程调试

java 使用idea检查线程信息 idea查看线程数_java_07


在调试的时候可以选择不同线程

java 使用idea检查线程信息 idea查看线程数_多线程_08


选择不同线程即可选择线程进行调试

远程调试

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

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

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

起作用的就是

-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9081

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

idea中设置远程调试

java 使用idea检查线程信息 idea查看线程数_java_09


然后就可以调试了,前提是本机有项目的源代码 ,在需要的地方打个断点,然后访问一个远程的url试试,断点就会停下来

java 使用idea检查线程信息 idea查看线程数_java_10

查看执行结果/临时执行表达式/修改变量的运行值

选中需要执行的表达式,点击右键会弹出一个界面

java 使用idea检查线程信息 idea查看线程数_java 使用idea检查线程信息_11

java 使用idea检查线程信息 idea查看线程数_多线程_12


点击执行,即可执行表达式计算结果,或者点击如下图标

java 使用idea检查线程信息 idea查看线程数_多线程_13

调试时,可以临时执行一些表达式,参考下图:

java 使用idea检查线程信息 idea查看线程数_远程调试_14

点击+号后,就可以在新出现的输入框里输入表达式,比如i+5

然后回车,马上就能看到结果

当然,如果调试时,想动态修改变量的值,也很容易,在变量上右击,然后选择Set Value

java 使用idea检查线程信息 idea查看线程数_多线程_15