Java如何打印所有局部变量?

我有一个方法,想要检查其中的变量而无需调试 – 在Java中是否可能?

我不想写大量的代码,如:

System.out.println("a: " + a); 

我想要的是:

 System.out.printLocals(); 

也应该很高兴有类似的东西:

 System.out.printMembersOf(someObjectInstance); 

好吧,你可以用varargs参数编写一个方法,然后写:

 dump(variable1, variable2, variable3, variable4, ...); 

它并不理想,但在某些情况下它就足够了。 没有办法从方法中自动获取所有局部变量并将其转储。

您可能会考虑某种字节码操作(例如使用BCEL )可以做到这一点……但它会非常难看。

我希望有类似的东西: System.out.printLocals();

它也应该很棒,例如: System.out.printMembersOf(someObjectInstance);

几乎每个Java类都有一个toString方法。 您重写该方法,您可以获得一个表示您要求的字符串。

Eclipse Helios以及其他IDE将为您生成基本的toString方法。

  • 只需将它们打印到调试器即可。 ( 使用Eclipse调试 )

要么

  • 打印到控制台:( System.out.println("var")

要么

  • 用户Log4J : http : //en.wikipedia.org/wiki/Log4j

您可以使用System.out.println打印输出变量。 例:

 int i = 42; System.out.println("i:" + i); 

“检查”是什么意思? 如果它是一个对象,请尝试使用System.out.println(yourvariable)或(yourvariable.toString())。 它会在控制台中显示它。

即使您是调试器,在运行时读取局部变量的值也不容易。 如果类中没有调试符号,即使使用调试器,也根本无法查看局部变量。

查看值的最简单的解决方案是使用System.out.println()打印它们或使用日志记录( slf4j )。

如果要在运行时示例局部变量而不更改代码,可以尝试AOP (面向方面​​编程)。 或者,您可以使用调试器用于检查正在运行的VM的相同API 。