1. 条件断点
IDEA 可以设置指定条件的断点,增加我们调试的效率。
public class Test {
public static void main(String[] args) {
for (int i = 0; i <= 100; i++) {
System.out.println(i);
}
}
}
2、在 System.out.println(i);这句话的左侧单击一下,出现一个红色的点,即为断点
3、右击断点,弹出如下对话框,在Condition 框里输入条件 i==66
4、运行debug,进入断点的那一刻,就是 i 等于66的时候
5、第3步的图片上看到的那个快捷键【Ctrl+Shift+F8】,打开后如下图,就是查看所有断点详情的对话框
除了使用快捷键以外,还可以直接在Debug 面板中,点击下图的这个标志(两个断点的标志)
2. 强制返回
IDEA 可以在打断点的方法栈处,强制返回你想要的方法返回值给调用方。非常灵活!
3. 模拟异常
IDEA 可以在打断点的方法栈处,强制抛出异常给调用方。这个在调试源码的时候非常有用。
4. Evaluate Expression
IDEA 还可以在调试代码的时候,动态修改当前方法栈中变量的值,方便我们的调试。
快捷键: alt+f8
鼠标点击
5. 回到"上一步"
该技巧最适合特别复杂的方法套方法的场景,好不容易跑起来,一不小心手一抖,断点过去了,想回过头看看刚才的变量值,如果不知道该技巧,只能再跑一遍。
参考上图,method1方法调用method2,当前断点的位置j=100,点击上图红色箭头位置的Drop Frame图标后,时间穿越了
回到了method1刚开始调用的时候,变量i变成了99,没毛病吧,老铁们,是不是很6 :)
注:好奇心是人类进步的阶梯,如果想知道为啥这个功能叫Drop Frame,而不是类似Back To Previous 之类的,可以去翻翻JVM的书,JVM内部以栈帧为单位保存线程的运行状态,drop frame即扔掉当前运行的栈帧,这样当前“指针”的位置,就自然到了上一帧的位置。
6. 多线程调试
多线程同时运行时,谁先执行,谁后执行,完全是看CPU心情的,无法控制先后,运行时可能没什么问题,但是调试时就比较麻烦了,最明显的就是断点乱跳,一会儿停这个线程,一会儿停在另一个线程,比如下图:
如果想希望下一个断点位置是第2句诗句,可能要失望了:
如果想让线程在调试时,想按自己的愿意来,让它停在哪个线程就停在哪个线程,可以在图中3个断点的小红点上右击,
即:Suspend挂起的条件是按每个线程来,而非All。把这3个断点都这么设置后,再来一发试试
注意上图中的红框位置,断点停下来时,这个下拉框可以看到各个线程(注:给线程起个容易识别的名字是个好习惯!),我们可以选择线程“天空中的飞鸟”
断点如愿停在了第2句诗。
7. 远程调试
- 菜单 -> Run -> Edit Configurations…
- 添加 -> Remote
- 配置
- 启动远程项目
正常启动命令如下:
java -jar ***.jar
开启远程调试:
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=7015 **.jar
其中 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=7015 是从上一步方框里拷贝出来的
- 注意事项
要保证远程调试监听的端口是放行状态
来源:CSDN
作者:存在,及合理
链接:https://blog.csdn.net/qq_26594041/article/details/104045036