我有一个方法,想要在不调试的情况下检查其中的变量 - 是否可以在Java中使用?
我不想写大量的代码,如:
System.out.println("a: " + a);
我想要像:
System.out.printLocals();
也应该很高兴有类似的东西:
System.out.printMembersOf(someObjectInstance);
答案 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)
答案 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。