java - 从 JVM 上的栈帧获取局部变量

标签 java jvm clojure snapshot locals

有没有什么方法可以在不使用调试器的情况下在 JVM 的当前范围内获取局部变量的映射或其他数据结构?即获取当前栈帧的locals?

我知道有堆栈跟踪对象,但 StackTraceElement 无法访问任何状态。它只是告诉您在何处调用了哪个方法,而不是其中的内容。

最佳答案

变量名可以包含在类文件中以帮助调试器,但 javac 默认情况下不这样做。它需要 -g:vars 选项。

如果它存在,程序可以使用像ASM 这样的字节码工程库。访问局部变量名称和范围。

同时 this question措辞不佳,我认为它是重复的,其答案可能与您的问题有关。我要补充一点,如果您不关心名称,局部变量类型和范围始终包含在每个方法的属性表中。

关于java - 从 JVM 上的栈帧获取局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1359044/

相关文章:

java - JPA - @EmbeddedId 和 @Id

java - 如何测试字符串之外的内容?

java - JVM 选项 -Xss - 它究竟做了什么?

clojure - Clojure 的整体贡献

java - Swing 面板中的背景颜色错误

java - java中如何获取单个输入

java - Jar-Exe转换后的文件执行

java - 调用jvm堆中对象的方法

clojure - Clojure 中的类型提示 nil 文字

mysql - clostache/render 函数中是否有多个参数?