本节学习目标
- 理解什么是调试
- 掌握常见的调试方式
- 熟练使用 IDEA 对 Java 程序进行调试,掌握各个调试按钮与快捷键
- 学会使用调用堆栈、监视表达式、条件断点等高级调试功能
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 调试界面介绍
调试窗口分为两大块:
- 代码区:代码高亮蓝色行代表当前即将要执行的代码。
- 下方 Debug 工具窗口,包含
Debugger、Console两个标签页。
- 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 标签页

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


程序所有标准输出System.out.println()打印的内容全部在这里展示;调试过程遇到输出语句,即可在这里看到输出结果。
4.3 条件断点(高级重点)
普通断点:每次运行到该行,一定会暂停。 条件断点:只有当设置的布尔条件满足的时候,程序才会在此处暂停。非常适合循环调试。

操作步骤(课件完整步骤):
- 在循环行打上普通断点(行号左侧点击出现红点);
- 鼠标右键这个红色断点圆点;
- 在弹出窗口
Condition输入布尔条件,示例:i == 20; - 点击 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 重复按几十次。

📔课件完整知识点总结
-
调试 Debug:查找、定位、修改 bug 的过程;缩小错误范围找到出错代码。
-
两种调试手段:小代码打印输出;复杂项目使用 IDEA 断点调试。
-
核心快捷键汇总表
表格
功能 快捷键 说明 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 统一管理全部断点 -
Debugger 页:Frames 调用栈看方法调用链;Variables 看变量;Evaluate 表达式临时计算。
-
Console:查看程序控制台打印输出。
-
条件断点:设置布尔条件,满足条件才暂停,循环调试神器。
-
Mute Breakpoints 一键屏蔽所有断点,不用逐个删除红点。
面试简答 Q:F7 和 F8 的区别? A:F7 Step Into:进入方法内部;F8 Step Over:执行本行,如果是方法调用,直接完整执行该方法,不进入方法内部。 Q:条件断点的作用? A:设置布尔条件,只有条件成立程序才暂停;循环场景避免反复单步,提高调试效率。
实操流程记忆:
- 行号左侧左键打红点断点 → 2. 右键 Debug 启动 →3. 使用 F8/F7/F9 控制执行流程 →4. 观察 Variables 变量值,定位 bug →5. 条件断点处理循环场景。
