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

时间:2015-11-14 21:14:00

标签: java bytecode

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

2 个答案:

答案 0 :(得分:3)

使用JDI(Java调试接口),可以查看线程的堆栈帧。 StackFrame的documentation给出了方法setValue,它允许您更改堆栈帧中局部变量的值。

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

我认为直接使用字节码不会允许您对堆栈帧进行任何进一步修改,因为这些是JVM的内部细节,字节码无法直接更改。特别是,我认为不可能创建新的堆栈帧并将它们添加到一个线程中(虽然这是我当然有兴趣找到的东西!)。

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

答案 1 :(得分:1)

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