有没有什么方法可以在不使用调试器的情况下在 JVM 的当前范围内获取局部变量的映射或其他数据结构?即获取当前栈帧的locals?
我知道有堆栈跟踪对象,但 StackTraceElement
无法访问任何状态。它只是告诉您在何处调用了哪个方法,而不是其中的内容。
最佳答案
变量名可以包含在类文件中以帮助调试器,但 javac
默认情况下不这样做。它需要 -g:vars
选项。
如果它存在,程序可以使用像ASM 这样的字节码工程库。访问局部变量名称和范围。
同时 this question措辞不佳,我认为它是重复的,其答案可能与您的问题有关。我要补充一点,如果您不关心名称,局部变量类型和范围始终包含在每个方法的属性表中。
关于java - 从 JVM 上的栈帧获取局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1359044/