Java, как распечатать все локальные переменные? - PullRequest
8 голосов
/ 18 марта 2011

У меня есть метод и я хочу исследовать переменные внутри него без отладки - возможно ли это в Java?

Я не хочу писать тонны кода вроде:

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

Iхочу что-то вроде:

System.out.printLocals();

Также было бы здорово иметь что-то вроде:

System.out.printMembersOf(someObjectInstance);

Ответы [ 6 ]

3 голосов
/ 18 марта 2011

Я хочу иметь что-то вроде: System.out.printLocals();

Также было бы здорово иметь что-то вроде: System.out.printMembersOf(someObjectInstance);

Почти каждый класс Java имеетtoString метод.Вы переопределяете этот метод и можете получить строку, которая представляет то, что вы просите.

Eclipse Helios, среди других IDE, сгенерирует для вас базовый метод toString.

3 голосов
/ 18 марта 2011

Ну, вы можете написать метод с параметром varargs и просто написать:

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

Это не идеально, но в некоторых случаях этого будет достаточно.Нет способа автоматически получить все локальные переменные из метода и вывести их.но это было бы довольно уродливо.

2 голосов
/ 18 марта 2011

ИЛИ

  • Вывести на консоль: (System.out.println("var"))

ИЛИ

1 голос
/ 18 марта 2011

Вы можете использовать System.out.println для распечатки переменных.Пример:

int i = 42;
System.out.println("i:" + i);
0 голосов
/ 18 марта 2011

Не просто прочитать значения локальных переменных во время выполнения, даже если вы отладчик.Если в вашем классе нет символов отладки, нет никакого способа увидеть локальные переменные, даже если вы используете отладчик.

Самым простым решением для просмотра значений является печать их с помощью System.out.println() илииспользовать ведение журнала ( slf4j ).

Если вы хотите создавать примеры локальных переменных во время выполнения без изменения кода, вы можете попробовать AOP (Аспектно-ориентированное программирование).Или вы можете использовать тот же API , который отладчик использует для проверки работающей виртуальной машины.

0 голосов
/ 18 марта 2011

Что вы подразумеваете под «осмотром»? Попробуйте System.out.println (yourvariable) или (yourvariable.toString ()), если это объект. Он будет отображаться в консоли.

...