java堆栈帧,字节码可以检查线程的所有堆栈帧吗
我是否可以编写字节码(使用asm lib)来检查并可能修改线程的所有方法调用的堆栈帧?使用JDI(Java调试接口),可以查看线程的堆栈帧。for StackFrame提供方法setValue,该方法允许您更改堆栈帧中局部变量的值 此外,该类还有一个方法popFrames,允许您从堆栈中删除帧 我认为直接使用字节码不允许对堆栈帧进行任何进一步的修改,因为这些是JVM的内部细节,字节码不能直接更改。特别是,我认为不可能创建新的堆栈帧并将它们添加到线程中(尽管我肯定有兴趣发现这是可能的!)java堆栈帧,字节码可以检查线程的所有堆栈帧吗,java,bytecode,Java,Bytecode,我是否可以编写字节码(使用asm lib)来检查并可能修改线程的所有方法调用的堆栈帧?使用JDI(Java调试接口),可以查看线程的堆栈帧。for StackFrame提供方法setValue,该方法允许您更改堆栈帧中局部变量的值 此外,该类还有一个方法popFrames,允许您从堆栈中删除帧 我认为直接使用字节码不允许对堆栈帧进行任何进一步的修改,因为这些是JVM的内部细节,字节码不能直接更改。特别是,我认为不可能创建新的堆栈帧并将它们添加到线程中(尽管我肯定有兴趣发现这是可能的!) 希望这有
希望这有帮助,JDI文档中可能隐藏了一些更有用的方法。否。如果Java支持嵌套方法,则需要这样的指令,但事实并非如此(与Pascal不同,Pascal支持嵌套方法,因此在p代码中需要这样的指令).以上内容似乎只有在我附加了调试器之后才可用,不是吗?@kostas.kougios不幸的是,是这样的。Thread.getStackTrace返回的常用StackTraceElement[]不可编辑。我最近一直在寻找一种编辑堆栈帧的方法,但收效甚微。。。