Question

Est-il possible de voir la valeur de retour d'une méthode après que la ligne a été exécutée et avant que le pointeur d'instruction ne revienne à la fonction appelante?

Je suis en train de déboguer du code que je ne peux pas modifier (lire: vous ne voulez pas recompiler une bibliothèque tierce) , et parfois il saute au code pour lequel je n'ai pas de source ou l'expression de retour a des effets secondaires qui m'empêchent d'exécuter l'expression dans l'onglet Afficher .

Souvent, la valeur de retour est utilisée dans une instruction composée et la vue Variables ne me montrera jamais la valeur (donc, vouloir voir le résultat avant que le contrôle ne retourne à la fonction appelante).

UPDATE: je ne peux pas utiliser l'afficheur d'expressions car il y a des effets secondaires dans la déclaration.

Était-ce utile?

La solution

Cette fonctionnalité a été ajoutée à Eclipse version 4.7 M2 sous bug 40912 sur Eclipse .

Pour l'utiliser:

  • écrasez l'instruction return (en utilisant les balises "Step Over" ou "Step Return")
  • la première ligne de la vue de la variable affiche le résultat de l'instruction return, comme suit: "[instruction xxx] renvoyée:"

Voir Projet Eclipse Oxygen (4.7) M2 - Nouveau et remarquable pour plus de détails.

Autres conseils

Vous avez trouvé un très bon raccourci pour cela. Sélectionnez l'expression qui renvoie la valeur et appuyez sur

.
Ctrl + Shift + D

Ceci affichera la valeur de l'instruction return. Ceci est vraiment utile dans les cas où vous ne pouvez pas ou ne voulez pas changer juste pour le débogage.

J'espère que cela vous aidera.

Remarque: je n'ai pas testé cela avec des bibliothèques tierces, mais cela fonctionne bien pour mon code. Ceci a été testé sur Eclipse Java EE IDE pour les développeurs Web. Version: Service Juno 1

Il s'agit en fait d'un bogue de longue date dans Eclipse, qui remonte aux tout premiers jours de l'EDI: https://bugs.eclipse.org/bugs/show_bug.cgi?id=40912

C'est pourquoi je m'en tiens toujours au modèle suivant pour les méthodes:

MyReturnedType foo() {
     MyReturnedType   result = null;

     // do your stuff, modify the result or not

     return result;
}

Mes règles:

  1. Une seule instruction return, uniquement à la fin de la méthode (enfin autorisée après)
  2. Toujours avoir un résultat appelé local contenant la valeur renvoyée, à partir d'une valeur par défaut.

Naturellement, les getters les plus triviaux sont exemptés.

Je suis curieux d'apprendre la réponse à cette question également.

Auparavant, lorsque je traitais avec une bibliothèque tierce comme celle-ci, j’ai créé une classe wrapper ou une classe enfant qui délègue des tâches à la classe parent et effectue le débogage dans la classe wrapper / child. Cela demande cependant du travail supplémentaire.

"Maintenant, lorsque vous revenez d'une méthode, dans la méthode supérieure, dans la vue des variables, il affiche la valeur de retour de l'appel terminé précédemment" " [1]

[1] https: / /coffeeorientedprogramming.wordpress.com/2016/09/23/eclipse-see-return-value-during-debugging/

Un dur. Mon expérience, en dehors d’Eclipse, est que si vous avez besoin de voir la valeur de retour, il est préférable de l’affecter à une variable locale dans la fonction afin que l’instruction de retour soit un simple return nom_var; . et pas return (some * expression || other); . Cependant, ce n'est pas terriblement utile pour vous puisque vous dites que vous ne pouvez pas (ou ne voulez pas) modifier ou même recompiler le code. Donc, je n'ai pas de bonne réponse pour vous. Peut-être devez-vous reconsidérer votre exigence.

En fonction de l'instruction de retour, vous pouvez mettre en surbrillance l'expression renvoyée et, à partir du menu contextuel, il devrait y avoir quelque chose comme "évaluer l'expression". (Je n'ai pas éclipse devant moi maintenant, mais c'est quelque chose comme ça). Il va vous montrer ce qui va être retourné.

C'est un peu tiré par les cheveux, mais comme il ne semble pas y avoir de moyen simple:

Vous pouvez utiliser AspectJ pour instrumenter le fichier JAR avec des aspects qui récupèrent la valeur de retour des méthodes qui vous intéressent. Selon la documentation d'Eclipse, les programmes AspectJ peuvent être débogué comme d’autres programmes.

Il existe deux options pour tisser vos classes sans recompiler la bibliothèque:

  • Tissage post-compilation si le traitement du fichier JAR binaire est acceptable;

  • Le tissage au moment du chargement, qui nécessite l'activation d'un agent de tissage dans la VM.

Voir la documentation eclipse (lien ci-dessus) ainsi que le Développement AspectJ Guide de l'environnement .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top