Kann ich den Rückgabewert ermitteln, bevor ich beim Debuggen in Intellij zurückkehre?

126

Mit:

Object method(){
    ...
    return /* some complex expression */
}

Kann ich sehen, welcher Wert beim Debuggen zurückgegeben wird? Wie irgendwie einen Haltepunkt setzen, der direkt nach der Rückkehr getroffen würde, aber bevor die Ausführung zum aufrufenden Code geht? Ich möchte wissen können, was der Rückgabewert ist und welche Werte alle lokalen Variablen haben.

Ich mache es jetzt so, indem ich eine temporäre Variable mache : Object ret = /* something complex */; return ret;. Aber das ist ein Ärger und fügt auch eine zusätzliche unnötige Codezeile hinzu.

Hinweis: Dies ist die gleiche Frage wie Kann ich den Rückgabewert herausfinden, bevor ich beim Debuggen in Visual Studio zurückkehre , jedoch für Intellij.

Kyle
quelle

Antworten:

31

Es scheint ein paar Möglichkeiten zu geben, wie Sie dies tun können. Der erste beinhaltet das Einrichten des Haltepunkts für die Methodensignatur. In Ihrem Fall würden Sie einen Haltepunkt für die Objektmethode () {einrichten. Auf diese Weise können Sie auf den Ein- und Ausgang der Methode achten. Ich glaube, Sie müssen dies in Verbindung mit den oben angegebenen " Rückgabewerten der Überwachungsmethode" verwenden , aber ich konnte dies nicht vollständig testen, da die Berechnung zu lange dauert. Beachten Sie, dass dies die Leistung des Debuggers drastisch verringert und das Debuggen länger dauert.

Sie können Folgendes auch manuell ausführen.

  1. Richten Sie den Haltepunkt auf der Rückleitung ein.
  2. Wenn die Rückgabezeile gedrückt wird, klicken Sie auf die Rückgabezeile, setzen Sie den Cursor speziell auf die Operation, die Sie sehen möchten, und gehen Sie dann zu Ausführen-> Ausdruck auswerten (oder Alt-F8). Der Ausdruck sollte an diesem Punkt und ausgeführt werden gib zurück, was es zurückgibt.

Hinweis : Wenn Sie einen Haltepunkt erstellen, können Sie IDEA viele Dinge anweisen, die damit zu tun sind. Wenn Sie beispielsweise einen Haltepunkt brechen, können Sie ihn anweisen, einen Ausdruck auszuführen und ihn zu protokollieren. Sie können sich umschauen, was Sie tun können, wenn Sie mit der rechten Maustaste auf einen Haltepunkt klicken und auf Eigenschaften klicken.

UPDATE : Versuchen Sie dies in Verbindung mit der ersten Methode. Verwenden Sie nicht "Rückgabewerte der Überwachungsmethode", da dies die Debugging-Sitzung zu verlangsamen oder einzufrieren scheint. Gehen Sie stattdessen wie folgt vor

  1. Klicken Sie mit der rechten Maustaste auf den Rückgabeausdruck, den Sie sehen möchten, und klicken Sie auf "Zu Uhren hinzufügen".
  2. Fügen Sie als Nächstes einen Methoden-Haltepunkt wie oben angegeben hinzu.
  3. Debuggen Sie Ihr Programm und Ihre Methode wird bei der Methodensignatur unterbrochen.
  4. Drücken Sie die Taste F9, um fortzufahren, und es sollte erneut unterbrochen werden, nachdem der Rückgabeausdruck berechnet wurde und sich Ihr Rückgabeausdruck in der Überwachungsspalte befinden sollte.

Denken Sie daran, dass Methoden-Haltepunkte langsamer sind, sodass es möglicherweise länger dauert. Eine schwierige Möglichkeit, dies zu verbessern, wenn Sie einen zu starken Leistungseinbruch feststellen, besteht darin, nur den Haltepunkt der return-Anweisung (ohne einen Methoden-Haltepunkt) festzulegen und dann den Methoden-Haltepunkt hinzuzufügen Nachdem der Haltepunkt der return-Anweisung erreicht wurde, wird fortgefahren.

Hoffe das hilft,

jluzwick
quelle
1
Sobald Sie (neues X ()) einen Haltepunkt und eine Uhr hinzugefügt haben, können Sie einfach Alt + F8 auf dieser Uhr ausführen, um das zurückgegebene Objekt zu "analysieren". Das ist wirklich nützlich.
Kedar Mhaswade
Wenn ich das richtig verstehe, funktioniert die hier vorgeschlagene Lösung nur, wenn der Ausdruck keine Nebenwirkungen hat. Ich empfehle definitiv nicht, komplizierte Ausdrücke im Allgemeinen in das Variablen- / Überwachungsfenster einzufügen.
Mashmagar
Seit mindestens 2016.3 gibt es einen viel besseren Weg. Siehe Antwort von Birchlabs für Details. Es sollte jetzt die akzeptierte Antwort sein.
Mikezx6r
150

In IntelliJ IDEA 2016.3: Es ist in der Zahnradschaltfläche des Debug-Panels versteckt. Stellen Sie sicher , Show Method Return Valueswird geprüft .

IntelliJ IDEA 2016.3 "Methodenrückgabewerte anzeigen"

Verwenden Sie den Debugger, um irgendwo innerhalb der Funktion zu brechen, deren Rückgabewert Sie sehen möchten.

Schritt in die Funktion

Verlassen Sie die Funktion (oder treten Sie über, bis Sie entkommen):

aussteigen

Beachten Sie, dass der Rückgabewert in Ihren Variablen angezeigt wird:

Beachten Sie den Rückgabewert

Birchlabs
quelle
3
@Stan Ich habe meine Antwort aktualisiert, um ein funktionierendes Beispiel bereitzustellen.
Birchlabs
40

Es gibt Uhr - Methode Rückgabewert Taste ist im Debugger - Panel .

Rückgabewerte der Überwachungsmethode : Klicken Sie auf diese Schaltfläche, um die Rückgabewerte der zuletzt ausgeführten Methode zu überwachen.

Rückgabewerte der Watch-Methode

IDEA 12 Konfiguration:

IDEE 12

CrazyCoder
quelle
2
Weder in den Registerkarten "Variablen" noch in den Registerkarten "Uhren" wird nichts angezeigt. Ich benutze Groovy, wenn das wichtig ist. Dies scheint auch den Rückgabewert der zuletzt ausgeführten Methode aus dem Kontext des aufrufenden Codes und nicht aus dem Kontext der Methode selbst anzuzeigen. Der wichtige Unterschied besteht darin, dass Sie, wenn Sie es im Kontext der Methode selbst sehen können, auch die Werte der lokalen Variablen der Methode anzeigen können. Auf diese Weise können Sie sehen, was schief gelaufen ist, wenn die Methode einen falschen Wert zurückgibt.
Kyle
3
Es zeigt den Rückgabewert im Bereich "Variablen" (unter Verwendung des vollständig qualifizierten Methodennamens). Dies sollte die akzeptierte Antwort gewesen sein. @ CrazyCoder +1 von mir :-)
Omri Spector
4
@CrazyCoder: Gibt es diese Funktion für IDEA 13 noch? Ich kann es nicht finden.
Kevinarpe
1
Ich bin auf Intellij 15 und sehe das auch nicht. Kannst du einen Screenshot posten?
Sanjiv Jivan
3
im Januar 2017 (Idee 2016.3.2): Sie müssen auf das Symbol Einstellungen (das Zahnrad direkt über dem gelben Menüpunkt im 2. Bild) klicken. Ein Menü mit "Rückgabewerte für Methoden anzeigen" wird angezeigt. Keine Notwendigkeit, Neustart nichts: nach der nächsten Rückkehr von einem Verfahren, dessen ObjectClassName.methodName () erscheint in der Variablen rechts unten sehen dies .
18446744073709551615
1

Dies wurde vor einiger Zeit gefragt, aber ich verwende eine andere Methode, wenn ich mit dieser Situation umgehen möchte.

Beim Debuggen können Sie den Ausdruck (in Ihrem Fall den Ausdruck direkt nach der "Rückkehr") markieren und STRG + ALT + F8 (Quick Evaluate Expression) drücken. IntelliJ öffnet ein kleines Fenster mit dem Wert, der zurückgegeben wird.

unbegrenzt
quelle
2
Wenn Sie einen Intel-Grafikchip verwenden, werden durch diese Tastenkombination Ihre sekundären Monitore heruntergefahren .
Coli
1
Linux-Benutzer: Strg + Alt + F8 - Benutzer werden an das 2. GUI-Terminal gesendet. In Ubuntu habe ich Strg + Alt + F2 gedrückt, um zurückzukehren.
Dmitriy Pavlukhin