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!

1voto

Joe Rattz Punkte 199

Ich denke, Sie können dies feststellen, indem Sie sich das RAX-Register im Register-Fenster (Debug / Windows / Registers) ansehen. Nachdem Sie die Funktion verlassen haben (SHIFT + F11), überprüfen Sie das RAX-Register. Ich weiß es nicht genau, aber es gab Zeiten, in denen man ein Register überprüfen konnte (vor .NET) und den Rückgabewert dort sehen konnte. Es könnte sogar eine Kombination aus RAX und RBX usw. sein.

1voto

Tom Punkte 802

Ja, indem ich auf VB.NET umsteige. ;P (Du hast gerade "Visual Studio" gesagt. ;)

Solange ich mich erinnern kann (von Visual Basic bis zu allen Versionen von VB.NET), können Sie einfach den Funktionsnamen abfragen. Er "funktioniert" wie eine lokale Variable, die implizit am Anfang der Funktion deklariert wird und deren aktueller Wert auch als Rückgabewert verwendet wird, wenn die Funktion durch eine Nicht-Rückgabe-Anweisung beendet wird (d.h. Exit Function oder einfach durchfallen) und natürlich, wenn die Return-Anweisung verwendet wird.

Er wird auch auf den Ausdruck der Return-Anweisung gesetzt. Genau wie eine lokale Variable kann ihr Wert an jedem Punkt der Ausführung innerhalb der Funktion überprüft werden (auch nach der Ausführung der Return-Anweisung). C# hat dies nicht und sollte es auch nicht haben.

Diese kleine VB.NET-Funktion (und die Exit Function Anweisung, die es ermöglicht - eine weitere Funktion, die C# nicht hat und haben sollte) ist sehr nützlich in einer Form von defensive Programmierung Ich praktiziere, indem ich den Funktionsnamen immer mit dem Fehler/Standardwert als erste Anweisung initialisiere. Dann kann ich an jedem Fehlerpunkt (der normalerweise viel häufiger auftritt als Erfolgspunkte) einfach die Exit Function Anweisung (d. h. ohne den Fehler-/Vorgabeausdruck oder sogar einen Konstanten-/Variablennamen duplizieren zu müssen).

1voto

Biri Punkte 6703

Sie können auch darum bitten, den Wert im Zwischenfenster auszuwerten, wenn er keine Flags oder andere Variablen setzt, sondern nur etwas zurückgibt.

0 Stimmen

Sie müssen das Lambda in die Frage einbeziehen, da ich manchmal auch das unmittelbare Fenster verwende

1voto

Die akzeptierte Antwort funktioniert nicht richtig mit Visual Studio 2015, aber wenn Sie einen Haltepunkt in der letzten Zeile der Methode setzen und die F10 werden alle Ausdrücke des Rückgabewerts in das Fenster locals gestellt.

0voto

Pita.O Punkte 1836

Ziehen Sie den Rückgabeausdruck per Drag & Drop in ein Überwachungsfenster.

Zum Beispiel, in der Aussage

return someTableAdapter.getSomeData();

Ziehen und Ablegen

someTableAdapter.getSomeData()

in ein Überwachungsfenster, und Sie sehen den Wert.

Sie können dies für jeden Ausdruck tun.

4 Stimmen

Das Problem dabei: Der Ausdruck wird zweimal ausgewertet.

8 Stimmen

Und Watch-Ausdrücke können keine Lambda-Ausdrücke enthalten, die ich häufig verwende.

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