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 。