Getting local variables from a stack frame on the JVM

风格不统一 提交于 2019-12-22 03:51:07

问题


Is there any way to get a map or other data structure of the local variables in the current scope in on the JVM without using a debugger? That is, to get the locals of the current stack frame?

I know that there are stacktrace objects, but StackTraceElement has no way to get access to any state. It just tells you what method was called where, but not what was in it.


回答1:


Variable names can be included in class files to aid debuggers, but javac doesn't do it by default. It requires the -g:vars option.

If it's present, a program could use a byte-code engineering library like ASM to access the local variable names and scope.

While this question is poorly phrased, I think it is a duplicate, and its answers may be relevant to your problem. I would add that if you don't care about the names, the local variable type and scope are always included in each method's attribute table.




回答2:


I don't think there is a way to do this. The compiler is always free to optimise away local variables, and providing such a method would prevent the compiler from taking advantage of this type of optimisation. When compiling a method, the compiler wouldn't be able to tell whether you called a hypothetical getLocalVariables() somewhere else in the program, so it would have to always put all declared local variables in such a map.



来源:https://stackoverflow.com/questions/1359044/getting-local-variables-from-a-stack-frame-on-the-jvm

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!