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

时间:2011-03-18 16:40:12

标签: java local-variables

我有一个方法,想要在不调试的情况下检查其中的变量 - 是否可以在Java中使用?

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

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

我想要像:

System.out.printLocals();

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

System.out.printMembersOf(someObjectInstance);

6 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:3)

  

我希望有类似的内容:System.out.printLocals();

     

也应该很高兴有类似:System.out.printMembersOf(someObjectInstance);

几乎每个Java类都有toString方法。您可以覆盖该方法,并且可以获得表示您要求的字符串。

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

答案 2 :(得分:2)

OR

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

OR

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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

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