红色实心圆点为启用暂停的行断点,黄色断点是禁用暂停的日志断点,仅输出日志不中断执行;二者通过右键断点切换Suspend选项相互转换。

IntelliJ IDEA 的断点不是“设上就能停”,很多卡在 F9 放行后直接跑完、Step Into 进不去方法、黄色断点不暂停,本质是没理解断点类型和挂起逻辑——先分清你要拦截的是“某一行”“某个方法入口”还是“某个字段被改”,再调参数,否则纯靠猜。
怎么区分红色断点和黄色断点?
红色实心圆点是默认的行断点,勾选 Suspend 才会暂停;黄色断点是日志断点(Logpoint),本质是“不挂起 + 自动打印”,它根本不会中断执行流。
- 右键断点 → 取消勾选
Suspend→ 点击Done,断点立刻变黄,控制台会输出类似Breakpoint reached at MyClass.method()的日志 - 想恢复暂停行为?右键该黄色断点 → 勾选
Suspend→Done,它就变回红色并重新生效 - 误把黄色断点当普通断点,结果程序飞快跑完还纳闷“为啥没断”——这是最常见的一手误判
为什么 F7 Step Into 进不去 JDK 或 Spring 方法?
IDEA 默认只进入你项目里的源码,Step Into(F7)遇到 JDK/第三方 jar 会直接跳过,不是 bug,是设计如此。要进,必须用强制模式。
- 把光标停在目标方法调用行 → 按
Alt+Shift+F7(Windows/Linux)或Option+Shift+F7(Mac),才能钻进ArrayList.add()或RestTemplate.exchange() - 前提是已配置好源码:JDK 源码通常自动关联;Spring 等框架需手动 Attach Sources(右键 jar →
Download Sources或指定本地spring-core-sources.jar) - 没 Attach Sources 就按
Force Step Into,IDEA 会显示反编译代码,可读性差但至少能看逻辑
大循环里只调试第 100 次迭代,怎么设条件断点?
直接在断点上右键 → More → 填写 Condition 表达式,比手动 F8 点 99 次靠谱十倍。
- 示例:for 循环中
i是索引变量,在循环体首行设断点 → 条件填i == 99(注意 Java 索引从 0 开始) - 支持完整 Java 表达式:
list != null && list.size() > 50、user.getEmail().contains("test") - 别写错语法:用
&&不是&,字符串比较用.equals()而非==,否则条件永远不成立 - 条件表达式里访问的变量必须在当前作用域可见,否则报
Cannot resolve symbol
字段被意外修改,怎么快速定位是谁干的?
行断点和方法断点都抓不住“谁改了这个字段”,得用字段监视点(Field Breakpoint),它监听 JVM 字节码层面的读/写操作。
- 打开目标类 → 在字段声明行(如
private String status;)左侧装订区右键 →Toggle Field Breakpoint - 右键该断点 → 勾选
Access(读)、Modification(写)之一或两者,通常只勾Modification - 注意:它对反射修改无效(如
Field.setAccessible(true)绕过访问控制),这是 JVM 限制,不是 IDEA 缺陷 - 命中后看
Frames面板最顶层的方法,就是触发修改的源头;如果线程多,结合Thread标签确认是哪个线程干的
断点类型选错、Suspend 没开、条件写错、源码没 Attach——这四点覆盖了 90% 的“断点不工作”问题。与其反复重启 Debug,不如先看一眼断点图标颜色和右键菜单里的配置项。


















