2011-03-18 26 views
8

Tengo un método y quiero examinar las variables dentro de él sin depuración: ¿es posible en Java?Java ¿cómo imprimir todas las variables locales?

no quiero escribir un montón de código como:

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

Quiero algo como:

System.out.printLocals(); 

también debe ser grande para tener algo como:

System.out.printMembersOf(someObjectInstance); 
+0

¿Qué IDE estás usando? – gideon

+0

Todos los miembros han sido preguntados en: http://stackoverflow.com/questions/1526826/printing-all-variables-value-from-a-class, mantengamos esto solo para los locales. –

Respuesta

0

¿Qué quiere decir con "examinar"? Pruebe un System.out.println (su variable), o (suvariable.toString()) si es un objeto. Lo mostrará en la consola.

1

Puede usar System.out.println para imprimir variables. Ejemplo:

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

Bueno, se puede escribir un método con un parámetro varargs y acaba de escribir:

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

No es lo ideal, pero será suficiente en algunas circunstancias. Sin embargo, no hay forma de obtener automáticamente todas las variables locales de un método y volcarlas.

Puede considerar algún tipo de manipulación de códigos de bytes (por ejemplo, con BCEL) que podría hacerlo ... pero sería bastante feo.

+0

BCEL hmm, feo ¿eh? Prefiero usar dump (ar1, ar2m, ..) –

0

No es fácil leer los valores de variables locales en tiempo de ejecución, incluso si es un depurador. Si no hay símbolos de depuración en su clase, no hay manera de ver las variables locales, incluso si usa un depurador.

La solución más simple para ver los valores es imprimirlos con System.out.println() o utilizar el registro (slf4j).

Si desea ejemplos variables locales en tiempo de ejecución sin cambiar el código, puede intentar AOP (programación orientada a aspectos). O puede usar el mismo API that a debugger uses para examinar la máquina virtual en ejecución.

3

quiero tener algo como: System.out.printLocals();

también debe ser grande para tener algo como: System.out.printMembersOf(someObjectInstance);

Casi toda clase de Java tiene un método toString. Anulas ese método y puedes obtener una cadena que represente lo que estás pidiendo.

Eclipse Helios, entre otros IDEs, generará un método básico toString para usted.

+0

esto no funcionará para el caso: 'public void foo (int k, String s) {System.out.printLocals(); } '// output esperado es el mismo que para' System.out.ptintln ("k:" + Integer.toString (k)); System.out.ptintln ("s:" + s); ' – denys

+0

@denys: Estás en lo cierto. Sin embargo, no hay ninguna razón por la que no pueda codificar un método toLocalString para cada uno de los métodos que quería para las variables locales. –

Cuestiones relacionadas