Est-il possible de voir la valeur de retour d'une méthode après l'exécution de la ligne et avant que le pointeur d'instruction ne retourne à la fonction appelante?
Je débogue du code que je ne peux pas modifier (lire: je ne veux pas recompiler une bibliothèque tierce) , et parfois il saute au code vers lequel je n'ai pas de source ou l'expression de retour a des effets secondaires qui m'empêchent d'être capable d'exécuter simplement l'expression dans l' onglet Affichage .
Souvent, la valeur de retour est utilisée dans une instruction composée, et donc la vue Variables ne me montrera jamais la valeur (par conséquent, je veux voir le résultat avant que le contrôle ne retourne à la fonction appelante).
MISE À JOUR: Je ne peux pas utiliser la visionneuse d'expression car il y a des effets secondaires dans la déclaration.
la source
Réponses:
Cette fonctionnalité a été ajoutée à Eclipse version 4.7 M2 sous le bogue Eclipse 40912 .
Pour l'utiliser:
return
instruction (en utilisant "Step Over" ou "Step Return")Voir Eclipse Project Oxygen (4.7) M2 - New and Noteworthy pour plus de détails.
la source
J'ai trouvé un très bon raccourci pour cela. Sélectionnez l'expression qui renvoie la valeur et appuyez sur
Cela affichera la valeur de l'instruction return. Ceci est vraiment utile dans les cas où vous ne pouvez pas ou ne voulez pas changer uniquement à des fins de débogage.
J'espère que cela t'aides.
Remarque: je n'ai pas testé cela avec des bibliothèques tierces, mais cela fonctionne bien pour mon code. Testé sur Eclipse Java EE IDE pour les développeurs Web. Version: Juno Service Release 1
la source
Ctrl + Shift + I
a également été utile pour moi.return System.currentTimeMillis();
, vous obtiendriez un résultat différent de celui de la fonction réellement retournée!Apple machine
?Il s'agit en fait d'un bogue de longue date dans Eclipse, datant des tout premiers jours de l'EDI: https://bugs.eclipse.org/bugs/show_bug.cgi?id=40912
la source
C'est pourquoi je m'en tiens toujours au modèle suivant pour les méthodes:
Mes règles:
Naturellement, les getters les plus triviaux sont exemptés.
la source
Je suis curieux d'apprendre la réponse à cette question également.
Dans le passé, lorsque je traitais avec une bibliothèque tierce comme celle-là, ce que je faisais était de créer une classe wrapper ou une classe enfant qui déléguait à la classe parent et faisait mon débogage dans la classe wrapper / child. Cela demande cependant du travail supplémentaire.
la source
"Maintenant, lorsque vous revenez d'une méthode, dans la méthode supérieure, dans la vue des variables, il montre la valeur de retour de l'appel précédemment terminé" [1]
[1] https://coffeeorientedprogramming.wordpress.com/2016/09/23/eclipse-see-return-value-during-debugging/
la source
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'attribuer à une variable locale dans la fonction afin que l'instruction de retour soit simple
return varname;
et nonreturn(some * expression || other);
. Cependant, cela ne vous aide pas terriblement 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.la source
En fonction de l'instruction de retour, vous pouvez mettre en évidence l'expression qui est renvoyée et dans le menu contextuel, il devrait y avoir quelque chose comme "évaluer l'expression" (je n'ai pas d'éclipse devant moi maintenant, mais c'est quelque chose comme ça ). Il vous montrera ce qui va être retourné.
la source
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 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és comme d'autres programmes.
Il existe deux options pour tisser vos classes sans recompiler la bibliothèque:
Tissage post-compilation si le traitement du JAR binaire est acceptable;
Tissage au chargement, qui nécessite l'activation d'un agent de tissage dans la VM.
Voir la documentation eclipse (lien ci-dessus) ainsi que le Guide de l'environnement de développement AspectJ .
la source