8

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

我不想编写大量代码,例如:

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

我想要类似的东西:

System.out.printLocals();

拥有类似的东西也应该很棒:

System.out.printMembersOf(someObjectInstance);
4

6 回答 6

3

我想要类似的东西:System.out.printLocals();

拥有类似的东西也应该很棒:System.out.printMembersOf(someObjectInstance);

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

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

于 2011-03-18T17:48:21.677 回答
3

好吧,您可以编写一个带有 varargs 参数的方法,然后只写:

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

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

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

于 2011-03-18T16:45:11.300 回答
1

或者

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

或者

于 2011-03-18T16:45:30.830 回答
1

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

int i = 42;
System.out.println("i:" + i);
于 2011-03-18T16:44:02.180 回答
0

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

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

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

于 2011-03-18T16:49:00.347 回答
0

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

于 2011-03-18T16:43:33.983 回答