2011-03-18 51 views
8

我有一个方法,并希望检查其中的变量,而无需调试 - 在Java中可能吗?Java如何打印所有本地变量?

我不想写这样吨代码:

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

我想是这样的:

System.out.printLocals(); 

而且它应该是巨大的,有这样的:

System.out.printMembersOf(someObjectInstance); 
+0

你在用什么IDE? – gideon 2011-03-18 16:50:48

+0

已经向所有成员询问:http://stackoverflow.com/questions/1526826/printing-all-variables-value-from-a-class,让我们继续为当地人。 – 2015-03-05 07:51:27

回答

0

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

1

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

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

好了,你可以写一个方法,用可变参数的参数,只是写:

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

它的效果并不理想,但它会在某些情况下是不够的。没有办法自动获取方法中的所有局部变量并转储它们。

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

+0

BCEL嗯,丑呃?我宁愿使用dump(ar1,ar2m,..) – 2017-08-04 18:12:55

0

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

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

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

3

我想有这样的:System.out.printLocals();

而且它应该是巨大的,有这样的:System.out.printMembersOf(someObjectInstance);

几乎所有的Java类有一个toString方法。你重写这个方法,你可以得到一个表示你要求的字符串。

Eclipse Helios和其他IDE将为您生成一个基本的toString方法。

+0

这种情况下不起作用:'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

+0

@denys:你是对的。但是,没有理由不能为每个想要本地变量的方法编写toLocalString方法。 – 2011-03-23 12:59:51