默认情况下IDEA的F7无法进入JDK源码,因Debugger默认跳过java.*等核心包;需在Settings→Debugger→Stepping中移除相关包过滤,并确保SDK的Sourcepath正确关联可写src目录。

默认情况下,IDEA 调试时按 F7(Step Into)进不到 JDK 源码里,不是你代码写错了,而是 IDEA 默认禁用了对 java.*、sun.* 等核心包的单步进入——这是保护机制,得手动关掉。
关闭 Debugger 的“Skip packages”限制
这是最常被忽略的一步。不关它,哪怕源码已加载,F7 也会直接跳过 ArrayList.add() 这类调用,退回到你的业务代码。
- 打开 Settings → Build, Execution, Deployment → Debugger → Stepping
- 找到 Skip classes 或 Skip packages 区域
- 确认
java.*、javax.*、sun.*、jdk.*这些条目**不在列表中**;如果存在,选中后点减号移除 - 勾选 Do not step into the classes 下方的 Use step filters,并确保它处于启用状态(否则设置无效)
确保源码路径正确关联到当前 SDK
只把 src.zip 或 OpenJDK src 目录拖进项目没用——IDEA 调试时查的是 SDK 配置里的 Sourcepath,不是项目结构里的源码。
- 进 Project Structure → SDKs,选中你正在用的 JDK(如
11或17) - 展开 Sourcepath,检查是否已有
src.zip(JDK 自带)或指向解压后的src目录(OpenJDK 下载版) - 如果没有,点击
+→Archive(选src.zip)或Directory(选解压后的src/java.base/share/classes等子目录) - 注意:OpenJDK 多模块结构(如
java.base、java.logging)需逐个添加对应src子目录,不能只加顶层src
调试时强制进入 JDK 方法(临时补救)
即使上述都配好了,某些内联方法或桥接方法仍可能跳过。这时别反复点 F7,换用强制进入:
- 光标停在想进的方法调用行(如
map.put("k", "v")) - 按
Alt+Shift+F7(Windows/Linux)或Cmd+Option+F7(macOS) - 它会无视跳过规则,直接停在
HashMap.put()第一行 - 后续再按
F7就能正常步进了——前提是源码路径已生效
为什么改了源码却看不到注释或断点?
因为 IDEA 默认从 src.zip 加载 JDK 源码,它是只读的。你编辑的注释不会保存,断点也可能失效。
- 解决办法:新建一个「可编辑 SDK」——复制原 SDK,在 Sourcepath 中替换为本地解压的、可写的
src目录(如~/openjdk17/src/java.base/share/classes) - 然后把当前项目 SDK 切换到这个新 SDK
- 注意:不要删原 SDK,保留它作编译依赖;新 SDK 只用于调试和阅读
- 验证方式:打开
String.java,尝试加一行注释并保存——能成功即说明路径可写
真正卡住人的往往不是下载或解压,而是 Skip packages 没关、或者 Sourcepath 指向了只读的 src.zip 却没意识到它不可编辑。调试 JDK 源码这件事,90% 的问题出在这两个地方。


















