web-dev-qa-db-fra.com

Java comment imprimer toutes les variables locales?

J'ai une méthode et je souhaite examiner les variables qu'elle contient sans déboguer - est-ce possible en Java?

Je ne veux pas écrire des tonnes de code comme:

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

Je veux quelque chose comme:

System.out.printLocals();

En outre, cela devrait être génial d'avoir quelque chose comme:

System.out.printMembersOf(someObjectInstance);
8
denys

Je veux avoir quelque chose comme: System.out.printLocals(); 

En outre, il devrait être intéressant d’avoir quelque chose comme: System.out.printMembersOf(someObjectInstance);

Presque toutes les classes Java ont une méthode toString. Vous substituez cette méthode et vous pouvez obtenir une chaîne qui représente ce que vous demandez.

Eclipse Helios, parmi d'autres IDE, générera une méthode toString de base pour vous. 

3
Gilbert Le Blanc

Eh bien, vous pouvez écrire une méthode avec un paramètre varargs et simplement écrire:

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

Ce n'est pas idéal, mais cela suffira dans certaines circonstances. Il n’existe aucun moyen de récupérer automatiquement toutes les variables locales d’une méthode et de les vider.

Vous pourriez envisager une sorte de manipulation de bytecode (par exemple avec BCEL ) qui pourrait le faire ... mais ce serait plutôt moche.

3
Jon Skeet

OR

  • Imprimez sur la console: (System.out.println("var"))

OR

2
gideon

Vous pouvez utiliser System.out.println pour imprimer des variables. Exemple:

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

Qu'entendez-vous par "examiner"? Essayez un System.out.println (votre variable), ou (votre variable.toString ()) s'il s'agit d'un objet. Il va l'afficher dans la console.

0
Raveline

Ce n'est pas simple de lire les valeurs des variables locales au moment de l'exécution, même si vous êtes un débogueur. S'il n'y a pas de symboles de débogage dans votre classe, il n'existe aucun moyen de voir les variables locales, même si vous utilisez un débogueur.

La solution la plus simple pour afficher les valeurs consiste à les imprimer avec System.out.println() ou à utiliser la journalisation ( slf4j ).

Si vous voulez donner un exemple aux variables locales au moment de l'exécution sans changer le code, vous pouvez essayer AOP (Programmation orientée aspect). Ou vous pouvez utiliser la même API qu'un débogueur utilise pour examiner la machine virtuelle en cours d'exécution.

0
Aaron Digulla