以下是 Eclipse Debug 调试的终极速成 + 进阶全家桶(2025 年最新版),看完这篇你立刻能比 95% 的人更快、更准、更爽地定位 bug。
一、先记住这 8 个核心快捷键(背下来,一辈子受用)
| 快捷键 | 功能 | 记忆口诀 |
|---|---|---|
| F11 | 直接启动 Debug(上一次配置) | 红色虫子最快键 |
| F5 | 步入(Step Into) | 进方法里看 |
| F6 | 步过(Step Over) | 一行一行走,不进方法 |
| F7 | 步出(Step Out) | 从当前方法跳出来 |
| F8 | 继续(Resume) | 跑到下一个断点或结束 |
| Ctrl + Shift + B | 在当前行打/取消断点 | 最快打断点方式 |
| Ctrl + Shift + I | 选中表达式 → 实时求值 | 看变量值神器 |
| Ctrl + R | 运行到光标行(Run to Line) | 快速跳过大循环 |
二、Debug 界面核心区域(从上到下记清楚)
- Debug 视图(左上)
- 显示所有线程,绿色那个是当前停的线程
- 右键 → Suspend / Resume / Terminate
- Variables 视图(右上)
- 查看所有局部变量、this、参数
- 右键变量 → Change Value → 临时改值测试
- Breakpoints 视图(右边标签)
- 所有断点一览,勾选框可批量启用/禁用
- 右键 → Add Condition(条件断点)
- Expressions 视图(可打开)
- 拖一个表达式进来,运行时实时显示值(比如 user.getOrders().size())
三、10 个最实用调试技巧(直接抄)
| 需求 | 操作方式(复制粘贴就行) |
|---|---|
| 1. 条件断点(只在 id=100 时停) | 断点右键 → Breakpoint Properties → Condition → 输入:id == 100 |
| 2. 循环10000次只看第500次 | 条件断点:i == 500 |
| 3. 任何地方抛空指针都停 | Breakpoints 视图 → J! → Add Java Exception Breakpoint → NullPointerException |
| 4. 跳过 Spring/MyBatis 源码 | Debug Configurations → Source → 勾选你的项目 → 排除 org.springframework.** 等 |
| 5. 实时改变量值测试 | Variables 视图 → 右键变量 → Change Value → 输入新值 |
| 6. 实时执行任意代码 | Display 视图(没打开就 Alt+Shift+D)→ 输入 user.setName("新名字") → Ctrl+U 执行 |
| 7. 方法不执行完直接返回假数据 | 在 Variables 视图右键当前方法栈 → Force Return → 输入 return new ArrayList<>() |
| 8. 快速跳到调用我的地方 | 在方法上右键 → Show Call Hierarchy 或在代码里 Ctrl+Alt+H |
| 9. 热替换代码(改了不重启) | 默认开启 + 装 Spring Boot DevTools,改完保存立刻生效 |
| 10. 远程调试生产环境 | 服务器启动加参数:-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000Eclipse 新建 Remote Java Application → 填 IP:8000 |
四、经典 Debug 场景实战模板
| 场景 | 推荐操作顺序 |
|---|---|
| 接口返回空,查不出来哪层丢了 | 1. 在 Controller 方法第一行打断点 2. F6 一路步过 3. 每层看返回值是否为空 4. 发现空了就 F5 进上一层继续查 |
| 死循环卡住 | 1. F8 暂停 → Debug 视图看哪个线程卡住 2. 双击线程 → 看堆栈定位到 while(true) |
| 多线程数据错乱 | 1. 在关键变量修改处打断点 2. 右键断点 → Thread → 勾选只在特定线程停 |
| 想看集合里第10个元素 | Variables 视图展开 list → 右键 → Copy → Paste Value(粘贴到浏览器看) |
五、一句话总结
日常调试永远只用这三步:
- Ctrl + Shift + B 打断点(怀疑哪里有问题点哪里)
- F11 启动 Debug
- F6 走 + F5 进 + Ctrl + Shift + I 看变量
现在告诉我你正在遇到的 bug 是什么?我直接告诉你该在哪里打断点、用什么条件断点、怎么最快定位!
(比如:接口返回空?死循环?多线程问题?Spring Bean 没注入?)快发来!