前言:之前博主写过一篇idea技巧合集的文章,由于技巧过于多了,文章很庞大,所以特地将调试相关的技巧单独成章, 调试和我们日常开发是息息相关的,用好调试可以事半功倍
1. idea调试异步线程
默认idea是调试主线程的,如果开启了异步线程 打断点不会进入,这在我们调试源码时不方便(例如redisson的源码会有大量异步线程的操作)
我们只需要在断点右键 在Supend选择Thread
(要注意的是 选择Thread的断点需要全面 例如A线程之后的代码开启了异步线程B,异步线程B下面有异步线程C的代码 断点需要在A/B/C线程都选上Thread 否则仍然不会进入C)
2. idea调试stream流
idea2024是非常方便调试的,不用额外操作;
在早些版本中:点击Trace Current Stream Chain 查看流的每步操作
3. 根据条件进入断点
断点右键写上Condition条件表达式即可,这在循环调试中非常方便,举个栗子:
直接跳过了前面无关数据
4. 调试当前代码行
我们用例子来解释是什么意思:
如下图 我们模拟了两个断点
一般情况下 我们会选择打多个断点 一步步调试,执行完第一个断点后,我们通常点击 跳到下一个断点
经常调试源码的同学应该深有体会,断点打一堆后会多不方便;拿jdk源码来说,在某个方法打上一个断点,有N多其它线程可能执行到断点。
那我们有没有什么方式 不打断点也能调试呢? 有的,有的,确实有的:
鼠标光标放在要调试的那行代码,按 ctrl + alt + F9
(博主idea用的是eclipse的那套快捷键,如果不是用的这套快捷键 不生效的话 试试 alt + F9 )
如上图,不打断点 仍然可以调试
5. 修改变量值调试
我们还是拿一个循环来举例:
我们不想关心 i<9 的逻辑时,可以在调试时 右键选择 evaluate expression
在expression时直接修改变量
6. 监控断点
监控断点是打在全局变量上面的断点,每当变量值发生变化的时候 都会有提示:
如图,我们只在定义变量时手动打上断点:
随着我们执行代码,在变量发生修改时 会自动提示:
public class DebugTest {
static String name = "";
public static void main(String[] args) {
name = "csdn:孟秋与你";
DebugInnerTest debugInnerTest = new DebugInnerTest();
name = debugInnerTest.modifyName(name);
System.out.println(name);
}
}
class DebugInnerTest {
public String modifyName(String name) {
return "修改名";
}
}
因为局部变量的生命周期仅在其作用域内有效(如函数、循环等),IDEA 无法直接在局部变量上设置独立的数据断点(监视值变化);在实际开发时,如果遇到某个方法内部的局部变量值很难调试 想监听时,那把它先定义成全局变量即可 调试完再改回去。