代码之家  ›  专栏  ›  技术社区  ›  bobpoekert

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

  •  8
  • bobpoekert  · 技术社区  · 17 年前

    有没有办法不使用调试器就在JVM上获取当前作用域中的局部变量的映射或其他数据结构?也就是说,获取当前堆栈帧的局部变量?

    StackTraceElement

    2 回复  |  直到 14 年前
        1
  •  5
  •   Community Mohan Dere    9 年前

    变量名可以包含在类文件中以帮助调试器,但是 javac -g:vars 选项

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

    虽然 this question 措辞不当,我认为它是重复的,它的答案可能与你的问题有关。我想补充一点,如果您不关心名称,那么局部变量类型和作用域总是包含在每个方法的属性表中。

        2
  •  2
  •   Greg Hewgill    17 年前

    我认为没有办法做到这一点。编译器总是可以自由地优化局部变量,提供这样的方法会阻止编译器利用这种类型的优化。编译方法时,编译器无法判断是否调用了假设的 getLocalVariables() 在程序的其他地方,因此它必须始终将所有声明的局部变量放在这样一个映射中。

    推荐文章