我有一个方法,并希望检查其中的变量,而无需调试 - 在Java中可能吗?Java如何打印所有本地变量?
我不想写这样吨代码:
System.out.println("a: " + a);
我想是这样的:
System.out.printLocals();
而且它应该是巨大的,有这样的:
System.out.printMembersOf(someObjectInstance);
我有一个方法,并希望检查其中的变量,而无需调试 - 在Java中可能吗?Java如何打印所有本地变量?
我不想写这样吨代码:
System.out.println("a: " + a);
我想是这样的:
System.out.printLocals();
而且它应该是巨大的,有这样的:
System.out.printMembersOf(someObjectInstance);
“检查”是什么意思?如果它是一个对象,请尝试一个System.out.println(yourvariable)或(yourvariable.toString())。它会在控制台中显示它。
您可以使用System.out.println
打印出变量。例如:
int i = 42;
System.out.println("i:" + i);
好了,你可以写一个方法,用可变参数的参数,只是写:
dump(variable1, variable2, variable3, variable4, ...);
它的效果并不理想,但它会在某些情况下是不够的。没有办法自动获取方法中的所有局部变量并转储它们。
你可能会考虑某种字节码操作(例如BCEL),它可以做到这一点...但它会非常难看。
BCEL嗯,丑呃?我宁愿使用dump(ar1,ar2m,..) – 2017-08-04 18:12:55
+1为Log4j – smas 2011-03-18 18:02:27
在'jdb'上有'locals'。 – 2015-03-05 07:53:32
即使你是一个调试器,在运行时读取局部变量的值也并不简单。如果类中没有调试符号,即使使用调试器,也无法查看局部变量。
查看值最简单的解决方案是使用System.out.println()
或使用日志记录(slf4j)打印它们。
如果您想在运行时更改示例局部变量而不更改代码,您可以尝试AOP(面向方面的编程)。或者您可以使用相同的API that a debugger uses来检查正在运行的VM。
我想有这样的:
System.out.printLocals();
而且它应该是巨大的,有这样的:
System.out.printMembersOf(someObjectInstance);
几乎所有的Java类有一个toString
方法。你重写这个方法,你可以得到一个表示你要求的字符串。
Eclipse Helios和其他IDE将为您生成一个基本的toString
方法。
这种情况下不起作用:'public void foo(int k,String s){System.out.printLocals(); }'//预期的输出与'System.out.ptintln(“k:”+ Integer.toString(k))相同; System.out.ptintln(“s:”+ s);' – denys 2011-03-23 12:44:29
@denys:你是对的。但是,没有理由不能为每个想要本地变量的方法编写toLocalString方法。 – 2011-03-23 12:59:51
你在用什么IDE? – gideon 2011-03-18 16:50:48
已经向所有成员询问:http://stackoverflow.com/questions/1526826/printing-all-variables-value-from-a-class,让我们继续为当地人。 – 2015-03-05 07:51:27