【Java SE】IDEA 调试 Debug 案例完整分析

本节学习目标

  1. 理解什么是调试
  2. 掌握常见的调试方式
  3. 熟练使用 IDEA 对 Java 程序进行调试,掌握各个调试按钮与快捷键
  4. 学会使用调用堆栈、监视表达式、条件断点等高级调试功能

1. 什么是调试

当我们发现程序中存在的问题的时候,我们去查找和改正错误的过程称为调试 (debugging)。 调试的一般途径是采用各种方法逐步缩小 bug 所在的范围,最终定位 bug 的准确位置。

2. 常见的调试方式

2.1 阅读代码跟踪程序问题

  • 适用于代码量短小的程序
  • 常见方式:逐行阅读代码、插入打印语句System.out.println()观察中间变量,定位问题。

缺点:代码量大的时候,频繁增删打印语句,效率低下。

2.2 使用工具调试

  • 适用于复杂程序
  • 使用集成开发工具(IDEA)内置调试器 Debug,不需要修改源代码。

3. 使用 IDEA 调试 Java 程序

3.1 如何打断点

断点:程序运行到这一行代码,执行该行之前暂停程序 。 操作:在代码行号的左侧,鼠标左键单击,出现红色小圆点,代表断点创建成功。

复制代码
public class Test {
    public static void main(String[] args) {
        int a = 10;
        System.out.println(a);
    }
}

行号 8 左侧点击出现红色圆点,程序执行到第 8 行会暂停。

3.2 如何启动调试

不要普通 Run 运行! 操作:代码编辑区域右键,弹出菜单,选择 Debug 'Test.main()'。 菜单选项:

  • Run 'Test.main ()':普通运行
  • ✅ Debug 'Test.main ()':调试模式启动程序

程序运行到断点位置,会停下来,进入调试界面。

3.3 调试界面介绍

调试窗口分为两大块:

  1. 代码区:代码高亮蓝色行代表当前即将要执行的代码。
  2. 下方 Debug 工具窗口,包含DebuggerConsole两个标签页。
  • Debugger 页:显示当前方法、局部变量。例如变量a = 10直接展示在变量监视区。

注意:蓝色高亮的行还没有执行

3.4 逐过程 Step Over

  • 功能:逐行执行代码;遇到方法调用,直接把整个方法执行完毕,不进入方法内部查看
  • 快捷键:F8

适用场景:不需要关心方法内部实现,只想看方法执行完的结果。

3.5 逐语句 Step Into

  • 功能:遇到方法调用,进入到方法的内部去一行一行执行
  • 快捷键:F7

注意:普通 F7 默认不会进入 JDK 库方法、第三方类库的源码,只会进入自己写的方法。

3.6 强制步入 Force Step Into

  • 快捷键:Alt + Shift + F7
  • 功能:强制步入,可以进入任何方法。
  • 和普通 Step Into (F7) 区别:
    • Step Into(F7):会跳过库方法、没有源代码的方法;
    • Force Step Into(Alt+Shift+F7)可以进入所有方法,包括 JDK 库方法

3.7 跳出功能 Step Out

  • 快捷键:Shift + F8
  • 功能:执行完当前方法剩下全部代码,直接返回到调用这个方法的上一层位置

使用场景:不小心进入一个很长的方法,不想一步步单步执行剩余代码,直接跳出回到调用处。

示例代码演示场景:

复制代码
public class Test {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int ret = add(a,b);
        System.out.println(ret);
    }
    public static int add(int x,int y){
        System.out.println("测试..");
        return x + y;
    }
}

当调试停在 add 方法内部,按下Shift+F8,add 剩余代码全部执行完毕,直接回到 main 方法调用add(a,b)的位置。

3.8 运行到光标所在位置 Run to Cursor

  • 快捷键:Alt + F9
  • 功能:程序直接运行到鼠标光标停留的那一行代码暂停,中间遇到断点依然会停下。

使用技巧:光标点击想要停下的代码,按 Alt+F9,直接跳到光标行,省去多次 F8 单步。

3.9 重新调试 Rerun

  • 快捷键:Ctrl + F5
  • 功能:终止当前正在进行的调试会话,从头重新启动 Debug 调试。

3.10 跳到下一个断点 Resume Program

  • 快捷键:F9
  • 功能:继续运行程序,直接运行直到遇到下一个断点;如果没有断点,程序直接运行结束

3.11 暂停 / 停止调试 Stop

  • 快捷键:Ctrl + F2
  • 功能:直接终止整个调试程序,结束 Debug 会话。

3.12 显示所有断点 View Breakpoints

  • 快捷键:Ctrl + Shift + F8
  • 功能:断点集中管理界面;可以查看、编辑、启用、禁用、删除全部断点。

3.13 屏蔽断点 Mute Breakpoints

按钮图标:圆点上面有斜杠

  • 功能:临时禁用全部断点,不需要逐个删除 / 取消红色圆点;再次点击恢复所有断点生效。

场景:已经打好一堆断点,临时不想断点停下来,不需要一个个删除红点,一键屏蔽。

4. Debug 窗口其他重要功能

4.1 Debugger 标签页

  1. Frames(调用堆栈 / 栈帧) 记录方法的调用链路。 示例:先执行 main 方法,main 调用 add 方法,栈帧从上往下记录调用顺序。 可以点击栈帧,回溯查看上一层调用的局部变量。
  2. Variables 变量监视区 展示当前栈帧下所有局部变量,实时显示变量的值。
  3. Evaluate expression(表达式求值) 输入任意 Java 表达式,回车就可以计算表达式结果,不会修改程序真实变量,用来临时测试计算。

快捷键提示:Ctrl+Shift+Enter

4.2 Console 控制台标签页

程序所有标准输出System.out.println()打印的内容全部在这里展示;调试过程遇到输出语句,即可在这里看到输出结果。

4.3 条件断点(高级重点)

普通断点:每次运行到该行,一定会暂停。 条件断点:只有当设置的布尔条件满足的时候,程序才会在此处暂停。非常适合循环调试。

操作步骤(课件完整步骤):

  1. 在循环行打上普通断点(行号左侧点击出现红点);
  2. 鼠标右键这个红色断点圆点
  3. 在弹出窗口Condition输入布尔条件,示例:i == 20
  4. 点击 Done 确认。

示例代码:

复制代码
public class Test {
    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            if(i == 20){
                System.out.println("测试..");
            }
        }
    }
}

设置条件 i == 20;程序循环跑,只有 i 等于 20 的时候才会暂停调试,不需要 F8 重复按几十次

📔课件完整知识点总结

  1. 调试 Debug:查找、定位、修改 bug 的过程;缩小错误范围找到出错代码。

  2. 两种调试手段:小代码打印输出;复杂项目使用 IDEA 断点调试。

  3. 核心快捷键汇总表

    表格

    功能 快捷键 说明
    Step Over 逐过程 F8 执行一行,不进入方法内部
    Step Into 逐语句 F7 进入方法内部,跳过 JDK 库代码
    Force Step Into 强制步入 Alt+Shift+F7 强制进入所有方法,包括库方法
    Step Out 跳出方法 Shift+F8 执行完当前方法,回到调用处
    Run to Cursor 运行到光标 Alt+F9 直接跑到光标位置暂停
    Rerun 重新调试 Ctrl+F5 从头重新 debug
    Resume 跳到下一个断点 F9 继续运行,遇到下一个断点停下
    Stop 停止调试 Ctrl+F2 终止调试会话
    View Breakpoints 断点管理 Ctrl+Shift+F8 统一管理全部断点
  4. Debugger 页:Frames 调用栈看方法调用链;Variables 看变量;Evaluate 表达式临时计算。

  5. Console:查看程序控制台打印输出。

  6. 条件断点:设置布尔条件,满足条件才暂停,循环调试神器。

  7. Mute Breakpoints 一键屏蔽所有断点,不用逐个删除红点。

面试简答 Q:F7 和 F8 的区别? A:F7 Step Into:进入方法内部;F8 Step Over:执行本行,如果是方法调用,直接完整执行该方法,不进入方法内部。 Q:条件断点的作用? A:设置布尔条件,只有条件成立程序才暂停;循环场景避免反复单步,提高调试效率。
实操流程记忆:

  1. 行号左侧左键打红点断点 → 2. 右键 Debug 启动 →3. 使用 F8/F7/F9 控制执行流程 →4. 观察 Variables 变量值,定位 bug →5. 条件断点处理循环场景。
相关推荐
晴天161 小时前
JavaScript 与 Java 垃圾回收机制对比
java·开发语言·javascript
xiaohua10091 小时前
JVM内存优化-jemalloc
java·jvm
吃饱了得干活1 小时前
Redisson 进阶实战:看门狗机制与分布式锁完全指南
java·redis·后端
淘源码d1 小时前
基于Java开发的上门家政系统源码,采用SpringBoot+MySQL+UniApp+Vue3技术栈,构建三端一体化平台
java·源码·上门家政·家政系统·同城家政·源码部署
Wang's Blog1 小时前
Java框架快速入门: Spring Security+OAuth2之多因子认证逻辑与实体类改造
java·开发语言·spring
ashiho1 小时前
【Spring】RequestParam/PathVariable/RequestBody详解
java·后端·spring·servlet·springmvc
Escalating_xu1 小时前
【mmap 进程间通信】从共享内存到跨进程唤醒:用互斥锁、条件变量控制多个进程
java·linux·开发语言·jvm
泡海椒2 小时前
脚本包导入实战:JQuick-Java自定义包引入与别名配置教程
java·开发语言·python
隐退山林2 小时前
JavaEE进阶:SpringBoot统一功能处理
java·spring boot·后端