Java: 调试器如何显示私有字段?

Java: How does the debugger show private fields?

如果在 Java class 中定义为 'private' 的字段只能从它们自己的 class 中访问 - 调试工具如何显示它们及其值我们正在遍历执行代码?

用于说明的画中画屏幕截图:

我最好的猜测是 JVM 具有允许特殊调试包访问这些的调试模式。 运行 在调试模式下(例如来自 IDE 的调试配置)允许这个特殊包(IDE 知道使用)做它的事情。

这很有趣...没有工作依赖于您在这里的回答:)

在基于 OpenJDK 代码库的 JVM 中,调试器使用 JVMTI 代理访问被调试程序的状态。代理调用 JVMTI 本机 API。这允许代理(以及调试器)读取和写入对象字段、局部变量等的值。 JVMTI APIs 忽略可访问性。 (与 JNI APIs 的方式相同。)

有关详细信息,请阅读 JVM Tools Interface documentation

有关更广泛的视图,请参阅 Java Platform Debugger Architecture documentation。 JVMTI 是该体系结构的一部分。