java堆栈帧,可以字节码检查线程的所有堆栈帧



我可以写字节码(使用asm-lib)来检查并修改线程的所有方法调用的堆栈帧吗?

使用JDI(Java调试接口),可以查看线程的堆栈帧。StackFrame的文档提供了方法setValue,该方法允许您更改堆栈框架中局部变量的值。

此外,类ThreadReference有一个方法popFrames,它允许您从堆栈中删除帧。

我不认为直接使用字节码会允许您对堆栈帧进行任何进一步的修改,因为这些是JVM的内部细节,字节码无法直接更改。特别是,我不认为创建新的堆栈帧并将其添加到线程中是可能的(尽管我肯定会感兴趣地发现这是可能的!)。

希望这能有所帮助,在JDI文档中可能隐藏着一些更有用的方法。

否。例如,如果Java支持嵌套方法,则需要这样的指令,但它不支持(不像Pascal那样支持,因此它确实需要p代码中的这样的指令)。

最新更新