467 Stimmen

Kann ich herausfinden, den Rückgabewert vor der Rückkehr während des Debuggens in Visual Studio?

Nehmen Sie die folgende Funktion:

DataTable go() {
    return someTableAdapter.getSomeData();
}

Wenn ich in dieser Funktion einen Haltepunkt setze, gibt es dann eine Möglichkeit, den zurückgegebenen Wert zu überprüfen? go() ist direkt mit einer Datentabelle in einer .aspx Seite.

Die einzige Möglichkeit, die zurückgegebene Datentabelle zu überprüfen, ist die Verwendung einer temporären Variablen. Das ist jedoch etwas umständlich. Gibt es keine andere Möglichkeit?

2 Stimmen

Sie können eine Überwachung hinzufügen, wenn Sie im Aufrufstapel nach oben gehen

0 Stimmen

Früher konnte man das in VB6 machen, wenn ich mich recht erinnere. Aber damals bestand die Syntax für Funktionen darin, den Wert der Funktion auf den Rückgabewert zu setzen...

5 Stimmen

Kommentar für Visual C++-Benutzer: Geben Sie $ReturnValue in das Immediate Window oder das Watch Window ein. Zumindest bei meinem VS 2010 hat es funktioniert!

13voto

Ross Buggins Punkte 195

Wenn Sie zum Menü gehen Werkzeuge Optionen IntelliTrace, und ändern Sie die Einstellung zum Sammeln von Ereignissen und Anrufinformationen.

Sie können zum vorherigen Anrufereignis zurückgehen ( Ctrl + Shift + F11 ) und sehen den temporären Wert, der vom Methodenaufruf zurückgegeben wird, im Auto-Fenster als Kind des Methodennamens.

Hier wird nicht der Rückgabewert für die Methode angezeigt, in der Sie sich befinden. Es zeigt Ihnen nur den Rückgabewert der zuletzt in der aktuellen Methode aufgerufenen Methode an.

Es ist also in Ordnung für

DataTable go(){return someTableAdapter.getSomeData();}

denn es zeigt Ihnen den Rückgabewert für someTableAdapter.getSomeData() .

Aber nicht für:

int go(){return 100 * 99;}

12voto

ColinM Punkte 388

Ein alter Trick aus der Zeit vor .NET: Öffnen Sie das Registerfenster und sehen Sie sich den Wert des EAX-Registers an. Dieses enthält den Rückgabewert der zuletzt aufgerufenen Funktion.

1 Stimmen

+1 für die alte Schule näher an der Metall-Ansatz - dies wird jedoch nicht für alle Rückgabewerte (und es ist bis zu der JIT'er, offensichtlich - wer weiß, was verrückt Optimierung könnte es entscheiden, die nicht verwenden EAX?) Bei ganzzahligen Typen wird es (meistens?) funktionieren. Große Werttypen sind eine andere Sache (und soweit ich mich aus einem Blogbeitrag erinnere, werden diese auch in VS2013 nicht angezeigt).

11voto

Verlassen Sie die go()-Methode mit der Tastenkombination Shift-F11, und im "Autos"-Debug-Fenster wird der Rückgabewert des Methodenaufrufs angezeigt, der gerade vom Stapel abgefallen ist (in diesem Fall die go()-Methode, die Sie benötigen). Dies ist das Verhalten in Visual Studio 2005; ich habe Visual Studio 2008 nicht verwendet, daher weiß ich nicht, ob es sich in dieser Version genauso verhält.

0 Stimmen

Ich habe dies sowohl in VS2005 als auch in VS2008 ausprobiert, aber ich sehe es nicht wirklich. Ich habe das "Autos"-Fenster geöffnet, aber wenn ich in die "Go"-Funktion gehe, ist das Autos-Fenster einfach leer. Auch wenn ich die Funktion verlasse (die schließende geschweifte Klammer der Funktion ist gelb). Können Sie mir noch einen Tipp geben?

0 Stimmen

Ich würde erwarten, dass das Autos-Fenster leer ist, wenn es sich INNERHALB der go()-Funktion befindet. Sie müssen VOLLSTÄNDIG aus der Funktion heraustreten (d.h. der Debug-Cursor sollte auf die Funktion zeigen, die go() aufgerufen hat) und dann sollten Sie den Rückgabewert für go() im Autos-Fenster sehen.

0 Stimmen

@LeopardSkinPillBoxHat: Ich kann das nicht zum Laufen bringen, auch nicht mit deinem zusätzlichen Hinweis. Versuchen Sie dies in Visual Basic? Es scheint eine bessere Unterstützung für das Beobachten und Ändern von Rückgabewerten zu haben...

7voto

Behzad Punkte 351

In VS2019, gehen Sie einfach zu Debug->Fenster->Autos Fenster. Dort sehen Sie den Rückgabewert von concat wie unten gezeigt:

enter image description here

0 Stimmen

Sollte die akzeptierte Antwort für VS 2019 und höher sein.

7voto

Konrad Viltersten Punkte 31400

Ja, es gibt einen sehr schönen Weg. Ein großer Nachteil ist, dass man 5, vielleicht 6 Jahre warten muss. Da ich sehe, dass Sie im November 2008 gepostet haben, schlage ich vor, dass Sie waaaaaa...

...aaaait. Und voilà! Nur für Sie, MS hat die neueste Visual Studio 2013 wo es eine Standardfunktion ist, die über die Menüs zugänglich ist im Laufen im Fehlersuchmodus (Menü Debuggen Windows Autos ).

0 Stimmen

@Doug Weil die Frage im November 2008 gestellt wurde und meine Antwort im September 2014 kam. Der ursprüngliche Poster ist wahrscheinlich zufrieden und will den Kredit nicht verschieben. Aber ich stimme Ihnen zu - ich hätte nichts gegen ein paar mehr Upsies bei meiner Antwort. Ich mag upsies und rep gain. :)

0 Stimmen

Ich hatte heute dieses Problem. Danke, dass Sie 2014 geantwortet haben, obwohl das ursprüngliche Problem aus dem Jahr 2008 stammt. Ihre Antwort ist das, wonach ich gesucht habe.

0 Stimmen

@A.P. Keine Probleme. Es fühlt sich ein bisschen wie eine Zeitmaschine an, diesen Beitrag zu sehen. Ein Schlag in die Vergangenheit, hehe.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X