PyCharm 2025.3 JVM Fatal Crash 分析
Date: 2026-06-09 09:51
JRE: JBR-21.0.8+9-1163.69-jcef
Host: AMD Ryzen 7 7840U, 16 cores, 59GB, Windows 10 19041.6807
PID: 22288, elapsed time: 39m 26s
崩溃现场
EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ffb5bffcd91
reading address 0x0000000000000118
Current thread: GC Thread#8
Problematic frame: V [jvm.dll+0xcd91]
反汇编崩溃点(jvm.dll+0xcd91):
49 8b 00 mov rax, [r8] ; rax = *r8 (load object header)
49 8b c8 mov rcx, rax ; rcx = rax (klass pointer)
48 ff a0 00 01 00 00 jmp qword [rax+0x100] ; attempt itable dispatch
RAX=0x18(24),访问 [0x18+0x100]=0x118 → AV
根因
ja-netfilter-2025.3.0 JVMTI agent 在 JBR 21.0.8 上破坏 itable 元数据
- agent 路径:
D:\softWin\installer\JetbrainsActivate\ja-netfilter\ja-netfilter-2025.3.0\ja-netfilter.jar - 通过 ASM 字节码修改 JetBrains license 验证类的虚函数表
- hook 过程中 itable 指针被覆写为 0x18,GC 线程遍历对象时 crash
- hs_err 日志 L2007 确认 agent
loaded, initialized
辅助证据
- 崩溃线程是 GC Thread#8—元数据破坏的典型发现者,不是制造者
- RAX=0x18 是极小的整数,不可能是合法堆指针—正是 itable 被覆盖的特征
- hs_err 打印线程列表时自身也二次 crash(L276),说明错误传播
- heap 使用约 1GB / 2GB,无 OOM 迹象
排除顺序
- 验证:注释
-javaagent:行重启 PyCharm(进入试用模式)确认不再崩溃 - 更新 ja-netfilter:查 GitHub releases 看是否有新版兼容 JBR 21
- 回退:恢复到 JBR 21.0.6 等早期版本
- 换方案:改用不通过 JVMTI instrumentation 修改字节码的激活方式
VM 配置
Custom VM options (C:\Users\cat\AppData\Roaming\JetBrains\PyCharm2025.3\pycharm64.exe.vmoptions):
--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
-javaagent:D:\softWin\installer\JetbrainsActivate\ja-netfilter\ja-netfilter-2025.3.0\ja-netfilter.jar