您的位置:

IDEA Debug断点调试技巧详解

一、使用条件断点定位问题

1、条件断点可以帮助我们定位一些奇怪的报错或程序行为。

2、在IDEA调试窗口中选中需要条件断点的代码行,右键-Add breakpoint-Condition

// 举例代码段
public class Test {
    public static void main(String[] args) {
        int sum = 0;
        for(int i = 1; i <= 100; i++) {
            sum += i;
        }
        System.out.println(sum); 
    }
}

3、条件输入框中添加布尔型的条件表达式

// 举例代码段的条件断点示例
public class Test {
    public static void main(String[] args) {
        int sum = 0;
        for(int i = 1; i <= 100; i++) {
            sum += i;
            if(i == 50) {
                System.out.println(sum); 
            }
        }
        System.out.println(sum); 
    }
}

二、日志断点记录流程信息

1、日志断点可以记录程序的流程信息,例如调用了哪些方法或者程序执行时间等。

2、在IDEA调试窗口中选中需要日志断点的代码行,右键-Add breakpoint-Log message

// 举例代码段的日志断点示例
public class Test {
    public static void main(String[] args) {
        int sum = 0;
        for(int i = 1; i <= 100; i++) {
            sum += i;
            System.out.println("i = " + i + ", sum = " + sum); //断点
        }
        System.out.println(sum); 
    }
}

3、在“Log Expression”输入框中输入需要记录的信息,在“More”选项中可以设置输出日志等级。

三、动态调试操作

1、调试过程中可以动态地调整程序的行为。

2、在IDEA调试窗口中右键选中需要动态调整的代码行,选择Evaluate expression或者Watch选项卡。

// 举例代码段的动态调试示例
public class Test {
    public static void main(String[] args) {
        int sum = 0;
        for(int i = 1; i <= 100; i++) {
            if(i % 2 == 0) {
                sum += i;
            }
            System.out.println(sum); // 断点
        }
    }
}

3、在“Evaluate expression”输入框中输入想要修改的变量值,例如:sum=10,点击"Enter"或选择"Evaluate"。

四、多线程调试

1、多线程并发调试需要注意多线程间的同步。

2、在IDEA调试窗口中,选择“View breakpoint”,选定“Java Exception Breakpoints”,选中“Synchronized”项。

// 举例代码段的多线程并发调试示例
public class TestThread extends Thread {
    public static void main(String[] args) {
        TestThread thread1 = new TestThread();
        TestThread thread2 = new TestThread();
        thread1.start();
        thread2.start();
    }
    public synchronized void run() {
        for(int i=0;i<5;i++) {
            try {
                sleep(1000);
             } catch (InterruptedException e) {
                 e.printStackTrace();
             }
            System.out.println(Thread.currentThread().getName() + "-" + i);
        }
    }
}

3、使用并发测试工具来验证多线程并发的结果是否正确。

五、利用IDEA的快捷键加速调试

1、提高调试效率,掌握IDEA的快捷键是必须的。

2、常见快捷键如下:

Ctrl+F8 : 跳过断点

Ctrl+Shift+F9 : 运行程序至光标所在代码行

Ctrl+Alt+Shift+R : 运行程序至光标所在代码行并打开Debug窗口

F8 : 单步运行

Shift+F8 : 跳过当前行,进入下一行

F7 : 进入当前行调用的方法

Shift+F7 : 跳过当前方法

Alt+F9 : 运行至光标所在行方法结束

Alt+F8 : 在Debug模式中计算表达式

3、快捷键可以根据个人喜好自定义。