有没有一种方法可以在 JVM 上以编程方式检查堆栈的内容(包括值和值的类型以及当前指令点)(即使它是特定于供应商的)?
例如,我想检查当前激活帧并提取它所属的方法名称,以及堆栈变量。此外,我希望能够以这种方式迭代激活帧。
这可能吗?乍一看,JVMTI似乎允许这样做,但它意味着用作 native 界面。已经used实现一个可以做这些事情的 Java 库,显然 - 但这似乎有点过时了。我想知道是否有一个解决方案集成到 JVM api 中,或者其他一些允许这样做的跨平台 JVM 库。
最佳答案
我找到的最接近的是 Javaflow它将带有局部变量的堆栈保存为一个对象。您还可以使用它来将堆栈恢复到已保存的状态。
关于java - JVM 堆栈自省(introspection),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7446607/