2019-01-03 · Develop

在 idea 中 debug 代码

Debug 用来追踪代码的运行流程,可以用来发现程序中存在的问题,快速定位及解决。除了定位问题外还可以用来学习三方框架的源码。这段时间一直使用 Intellij IDEA 作为 Java 开发的主要编辑器,今天把 Debug 调试工具的一些使用方式记录与此。

在开始之前先写个简单的代码来启动 Debug 模式,代码主要通过两个线程来输出 ASCII 中大小写字符的十进制值和当前的线程名称,代码如下

public class Main {

    public static void main(String[] args) {
        thread();
    }

    private static void printLower() {
        for (char c = 0; c < 128; c++) {
            if (Character.isLowerCase(c)) {
                System.out.println(Thread.currentThread().getName() + " -> " + c + " : " + (int) c);
            }
        }
    }

    private static void printUpper() {
        for (char c = 0; c < 128; c++) {
            if (Character.isUpperCase(c)) {
                System.out.println(Thread.currentThread().getName() + " -> " + c + " : " + (int) c);
            }
        }
    }

    private static void thread() {
        new Thread(Main::printLower).start();
        new Thread(Main::printUpper).start();
    }
}

基本功能和快捷键

功能 快捷键 描述
Breakoint Ctrl+F8 将当前行打上/取消断点
Setp Over F8 步过,不进入方法
Force Step Over Alt+Shift+F8 强制步过
Setp Into F7 步入,如果有方法就进入,不进入官方方法
Force Setp Into Alt+Shift+F7 强制步入,进入任何方法
Smart Setp Into Shift+F7 智能步入,当一行有多个方法时,可以选择进入指定方法
Stop out Shift+F8 步出,执行完断点所在方法
Run to Cursor Alt + F9 断点执行到光标位置
Force Run to Cursor Ctrl+Alt + F9 强制断点执行到光标位置
Drop Frame - 回退断点到方法调用处
Show Execution Point Alt+F10 将光标快速跳转到断点执行的地方

上面的功能基本上所有具有 Debug 功能的编辑器都会提供,只是不同编辑器,不同系统的快捷键不一样而已,下面的快捷键是基于 Windows 版本。就不进行详细的介绍了,这里主要说下 Drop Frame ,其功能就是按照调用的方法进行逐步的回退,包括三方类库和其他的方法,使用 Show All Frames 按钮会显示所有经过了的调用栈。
debug-drop-frame
然后就是智能步入功能(Shift+F7),当一行有多个方法调用的时候就可以智能的选择步入的方法,就想下面这张图一样
debug-smart-setp-into

View Breakpoints

使用 Ctrl+Shift+F8 快捷键能查看所有断点的详细信息
debug-view-breakpoints

表达式操作

在 Debug 中跟踪变量的变化可以通过下面三种方式:

但是单个变量有时并不能满足我们的需求,比如我想知道某个表达式的值,这个时候就可以在使用 New Watch 按钮来实现我们的需求
debug-new-watch
点击上面的加号,在出现的眼镜中添加想要的表达式。
除了查看外,在有些时候需要调试各种值得情况,需要去这种变量的值,可以进行如下的操作
debug-set-value
当然还有更为强大的表达式计算功能 Evaluate Expression (Alt+F8)。其能够运行 Java 代码片段,并且能够调用 Debug 中所有的变量。
debug-evaluate-expression

中断 Debug

想要在 Debug 中,中断请求,不再执行后面的逻辑(比如在数据错误的情况下,不想走后面对数据库操作的逻辑),这个时候除了停止应用外,还可以通过 Force Return (强制退出)来中断流程。
debug-force-return


参考文档

在Intellij IDEA中使用Debug
Intellij IDEA调试功能使用总结