Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java堆栈帧,字节码可以检查线程的所有堆栈帧吗_Java_Bytecode - Fatal编程技术网

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

java堆栈帧,字节码可以检查线程的所有堆栈帧吗,java,bytecode,Java,Bytecode,我是否可以编写字节码(使用asm lib)来检查并可能修改线程的所有方法调用的堆栈帧?使用JDI(Java调试接口),可以查看线程的堆栈帧。for StackFrame提供方法setValue,该方法允许您更改堆栈帧中局部变量的值 此外,该类还有一个方法popFrames,允许您从堆栈中删除帧 我认为直接使用字节码不允许对堆栈帧进行任何进一步的修改,因为这些是JVM的内部细节,字节码不能直接更改。特别是,我认为不可能创建新的堆栈帧并将它们添加到线程中(尽管我肯定有兴趣发现这是可能的!) 希望这有

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

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

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

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


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

否。如果Java支持嵌套方法,则需要这样的指令,但事实并非如此(与Pascal不同,Pascal支持嵌套方法,因此在p代码中需要这样的指令).

以上内容似乎只有在我附加了调试器之后才可用,不是吗?@kostas.kougios不幸的是,是这样的。Thread.getStackTrace返回的常用StackTraceElement[]不可编辑。我最近一直在寻找一种编辑堆栈帧的方法,但收效甚微。。。