有没有办法获取java方法中声明的所有变量的列表?

时间:2009-10-14 19:45:26

标签: java variables

有没有办法以编程方式访问方法中定义的变量(任何方法,静态与否)?在调试代码时,IDE如何显示它们?

4 个答案:

答案 0 :(得分:1)

您可能希望阅读this它能够很好地解释这一点。你正在寻找的是RemoteStackFrame,这就是事物可以获得目前在范围内的东西

这是一个复杂的主题,但我希望这会有所帮助。

答案 1 :(得分:1)

我不了解其他IDE,但Eclipse使用The Abstract Syntax Tree (AST)

答案 2 :(得分:1)

如果您使用的是eclipse,则可以使用Eclipse提供的JDT API。如果您要创建插件项目,那么这些将可用。

答案 3 :(得分:1)

IDE通常使用调试api的组合,例如[Java Platform Debugger Architecture] [1]提供的调试api,以及它正在调试的代码结构的知识。

读取局部变量的值(即使在调试时),要求使用调试信息编译类文件。在Java中(与许多其他语言一样),必须显式生成调试信息,以便在运行时可以访问它。特别是局部变量以及从字节码到源行号的映射。

[JDI] [2] api相当容易实现一个简单的调试器。但是,如果你正在寻找的是对局部变量的某种反思,那你就不走运了。

我唯一能想到的最后一种情况是使用某种字节码操作库,如[BCEL] [3]或[ASM] [4]并在加载之前修改字节码以允许您访问运行时的变量值。

这肯定会降低代码的速度并且很难实现。最后,如果你退后一步思考它,可能会更容易完全避免这个问题。

(抱歉有错误的链接,但StackOverflow限制链接数量)

[1]:http:// java.sun.com/javase/technologies/core/toolsapis/jpda/   [2]:http:// java.sun.com/javase/6/docs/jdk/api/jpda/jdi/index.html   [3]:http:// jakarta.apache.org/bcel/   [4]:http:// asm.ow2.org /