Ist es möglich, den Rückgabewert einer Methode zu sehen, nachdem die Zeile ausgeführt wurde und bevor der Anweisungszeiger zur aufrufenden Funktion zurückkehrt?
Ich debugge Code, den ich nicht ändern kann (lesen Sie: Ich möchte keine Bibliothek eines Drittanbieters neu kompilieren) , und manchmal springt er zu Code, für den ich keine Quelle habe, oder der Rückgabeausdruck hat Nebenwirkungen, die mich davon abhalten, zu sein Sie können den Ausdruck einfach auf der Registerkarte Anzeige ausführen .
Oft wird der Rückgabewert in einer zusammengesetzten Anweisung verwendet, und daher zeigt mir die Variablenansicht niemals den Wert an (daher möchte ich das Ergebnis sehen, bevor das Steuerelement zur aufrufenden Funktion zurückkehrt).
UPDATE: Ich kann den Ausdrucks-Viewer nicht verwenden, da die Anweisung Nebenwirkungen enthält.
quelle
Antworten:
Diese Funktion wurde zu Eclipse Version 4.7 M2 unter dem Eclipse-Fehler 40912 hinzugefügt .
Um es zu benutzen:
return
Anweisung (mit "Step Over" oder "Step Return")Weitere Informationen finden Sie unter Eclipse Project Oxygen (4.7) M2 - Neu und bemerkenswert .
quelle
Habe dafür eine wirklich gute Abkürzung gefunden. Wählen Sie den Ausdruck aus, der den Wert zurückgibt, und drücken Sie
Dies zeigt den Wert der return-Anweisung an. Dies ist sehr hilfreich in Fällen, in denen Sie Änderungen nicht nur zum Debuggen vornehmen können oder möchten.
Hoffe das hilft.
Hinweis: Habe dies nicht mit Bibliotheken von Drittanbietern getestet, aber es funktioniert gut für meinen Code. Getestet auf Eclipse Java EE IDE für Webentwickler. Version: Juno Service Release 1
quelle
Ctrl + Shift + I
war auch hilfreich für mich.return System.currentTimeMillis();
erhalten Sie ein anderes Ergebnis als die tatsächlich zurückgegebene Funktion!Apple machine
?Dies ist tatsächlich ein langjähriger Fehler in Eclipse, der aus den ersten Tagen der IDE stammt: https://bugs.eclipse.org/bugs/show_bug.cgi?id=40912
quelle
Deshalb halte ich mich bei den Methoden immer an das folgende Muster:
Meine Regeln:
Natürlich sind die trivialsten Getter davon ausgenommen.
quelle
Ich bin gespannt darauf, auch die Antwort auf diese Frage zu erfahren.
In der Vergangenheit habe ich beim Umgang mit solchen Bibliotheken von Drittanbietern eine Wrapper-Klasse oder eine untergeordnete Klasse erstellt, die an die übergeordnete Klasse delegiert und mein Debugging in der Wrapper / untergeordneten Klasse durchgeführt. Es erfordert jedoch zusätzliche Arbeit.
quelle
"Wenn Sie jetzt von einer Methode zurückkehren, wird in der oberen Methode in der Variablenansicht der Rückgabewert des zuvor abgeschlossenen Aufrufs angezeigt." [1]
[1] https://coffeeorientedprogramming.wordpress.com/2016/09/23/eclipse-see-return-value-during-debugging/
quelle
Schwierig. Außerhalb von Eclipse habe ich die Erfahrung gemacht, dass es am besten ist, den Rückgabewert einer lokalen Variablen in der Funktion zuzuweisen, damit die Rückgabeanweisung einfach ist
return varname;
und nichtreturn(some * expression || other);
. Dies ist jedoch für Sie nicht besonders hilfreich, da Sie sagen, dass Sie den Code nicht ändern oder sogar neu kompilieren können (oder wollen). Ich habe also keine gute Antwort für Sie - vielleicht müssen Sie Ihre Anforderung überdenken.quelle
Abhängig von der return-Anweisung können Sie den zurückgegebenen Ausdruck markieren. Im Kontextmenü sollte sich so etwas wie "Ausdruck auswerten" befinden (ich habe jetzt keine Sonnenfinsternis vor mir, aber es ist so ähnlich ). Es zeigt Ihnen, was zurückgegeben wird.
quelle
Dies ist ein bisschen weit hergeholt, aber da es keinen einfachen Weg zu geben scheint:
Sie können AspectJ verwenden, um die JAR mit Aspekten zu instrumentieren, die den Rückgabewert der Methoden erfassen, an denen Sie interessiert sind. Gemäß der Dokumentation von Eclipse können AspectJ-Programme wie andere Programme debuggt werden.
Es gibt zwei Möglichkeiten, Ihre Klassen zu weben, ohne die Bibliothek neu zu kompilieren:
Weben nach dem Kompilieren, wenn die Verarbeitung der binären JAR akzeptabel ist;
Ladezeitweben, für das ein Webmittel in der VM aktiviert werden muss.
Weitere Informationen finden Sie in der Eclipse-Dokumentation (Link oben) sowie im AspectJ Development Environment Guide .
quelle