【发布时间】:2023-04-04 15:56:01
【问题描述】:
根据OpenJDK's website,可以将线程附加到Hotspot(动态附加API),它可以收集有关它的信息。我在 Internet 上找不到任何有关如何获取有关 Hotspot 内部数据结构的信息的材料,例如操作数堆栈或字节码解释器的状态(以了解当前正在执行的字节码)或检索当前堆栈帧等。
另外,如果动态附加 API 无法做到这一点,那么如何使用 Serviceability Agent 来实现呢?我在 Internet 上找到的唯一示例是 this gist from Github,它显示了如何附加到正在运行的 JVM 并获取某些字段的值。但是如何访问上述JVM中的内部数据结构呢?
【问题讨论】:
-
jvmti 具有或多或少您提到的所有功能(正在执行的字节码、当前堆栈帧等)
-
您的目标到底是什么?你想做什么?
-
@PiRocks 我正在尝试构建一个反向调试器(您可以退后一步)...我尝试使用 JVMTI,但这些函数会导致过多的开销。基本上我想要实现的是在每个执行的行获取最重要的JVM结构的值(并存储它)。
-
字节码检测可能是你最好的选择。
标签: java debugging jvm jvm-hotspot jvmti