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!

334voto

Marc Gravell Punkte 970173

Nicht dass ich wüsste. Beachten Sie, dass wenn Sie do eine Variable hinzufügen, wird sie vom Compiler in Release-Builds ohnehin entfernt...

Aktualisierung: Diese Funktionalität wurde in VS2013 hinzugefügt . Sie können die Rückgabewerte in den autos Windows sehen oder mit $ReturnValue im Fenster "Überwachen/unmittelbar".

Der Wert ist nur direkt nach der Rückkehr aus der Funktion zu sehen. Der einfachste Weg, darauf zuzugreifen, ist also, einen Haltepunkt auf den Funktionsaufruf zu setzen und den Aufruf zu übergehen (F10).


Update für VS2015: boo! leider scheint es nicht in VS2015 (devenv v14) zu sein
Update für VS2017: Es ist wieder da. (devenv v15)

14 Stimmen

Der Grund für den Verzicht auf die Aushilfskraft ist die Lesbarkeit und der Stil, nicht die Effizienz, oder?

2 Stimmen

@orip es gibt verschiedene Gründe, den Code nicht zu ändern, wie z.B.; es ist nicht Ihr Code, es ist eine einmalige Fehlersuche und ein erneutes Durchgehen würde viel Zeit in Anspruch nehmen. (deshalb habe ich diese Frage ja auch gestellt :-)

8 Stimmen

Dies ist seit VS 2010 mit IntelliTrace möglich: blogs.msdn.com/b/habibh/archive/2009/10/23/

57voto

Alex Angas Punkte 57602

Dies kann in Visual Studio 2013 mit CLR 4.5.1 durchgeführt werden laut der Website für Kundenfeedback . Sie war in früheren Versionen für C# nicht verfügbar.

(Visual Studio 2008 und früher unterstützte es für VB.NET. Für C/C++-Entwickler war es schon immer verfügbar).

1 Stimmen

Wie kann man dies in Visual Studio 2010 C++ tun?

0 Stimmen

Laut Microsoft Connect gibt es ein grundsätzliches Problem mit verwaltetem Code, das eine zuverlässige Implementierung verhindert:

0 Stimmen

@DanSolovay Die Worte, die sie verwenden, lauten: "Wir konnten nicht durchgängig das Richtige tun" (für VS11), aber sie "wollen das zurückbringen" und "sehen sich eine Reihe möglicher Lösungen für dieses Problem an".

26voto

Omer Raviv Punkte 11073

Ich stimme zu, dass dies eine sehr nützliche Sache ist: nicht nur den Rückgabewert der Methode zu sehen, bevor ich sie verlasse, sondern auch den Rückgabewert von Methoden, die ich gerade übersprungen habe. Ich habe dies als Teil einer kommerziellen Erweiterung für Visual Studio namens " OzCode ".

Damit können Sie die Rückgabewerte von Methoden direkt im Code-Editor anzeigen, als eine Art HUD-Display:

Statement Visualization

Weitere Informationen finden Sie unter dieses Video .

1 Stimmen

Sieht toll aus, aber 100 Dollar pro Jahr für die Visual Studio Extension ist für Privatanwender wirklich zu viel. Für Unternehmen kann das anders sein.

25voto

Dan Solovay Punkte 3071

Laut Microsoft gibt es keine Möglichkeit, dies mit verwaltetem Code zuverlässig zu implementieren. Dieses Problem ist ihnen bekannt und sie arbeiten daran:

Diejenigen, die bereits Erfahrung mit dem Debuggen von nativem C++- oder VB6-Code haben, kennen vielleicht die Funktion, bei der die Rückgabewerte von Funktionen im Fenster Autos angezeigt werden. Leider gibt es diese Funktion nicht für verwalteten Code. Sie können dieses Problem zwar umgehen, indem Sie die Rückgabewerte einer lokalen Variablen zuweisen, aber das ist nicht so bequem, weil Sie dazu Ihren Code ändern müssen. In verwaltetem Code ist es viel schwieriger, den Rückgabewert einer Funktion zu ermitteln, über die man getreten ist. Wir haben erkannt, dass wir hier nicht konsequent das Richtige tun können, und deshalb haben wir die Funktion entfernt, um Ihnen keine falschen Ergebnisse im Debugger zu liefern. Wir möchten diese Funktion jedoch wieder einführen, und unsere CLR- und Debugger-Teams prüfen derzeit eine Reihe von möglichen Lösungen für dieses Problem. Leider wird diese Funktion nicht Bestandteil von Visual Studio 11 sein.

https://connect.microsoft.com/VisualStudio/feedback/details/597933/add-a-return-pseudo-variable-to-the-visual-studio-debugger-for-net-code

1 Stimmen

Per @Alex oben ( stackoverflow.com/a/3714884/402949 ), ist dies für VS2013 mit CLR 4.5 verfügbar

24voto

PascalK Punkte 301

Bezüglich Visual Studio 2015:

So lautet die derzeit akzeptierte Antwort von Marc Gravell:

Ce site Funktionalität wurde zu Visual Studio 2013 hinzugefügt . Sie können die Rückgabewerte Werte in den autos-Fenstern sehen oder $ReturnValue im watch/immediate Fenster

In dieser Antwort wurde auch angegeben, dass diese Funktion in Visual Studio 2015 nicht funktioniert. Dies ist nicht (ganz) wahr. Auf Untersuchung der Rückgabewerte von Methodenaufrufen gibt es die folgende Anmerkung:

Sie müssen die Legacy-Ausdruck-Auswerter aktiviert haben für $ReturnValue anerkannt zu werden (Extras / Optionen / Debugging / Die alten C#- und VB-Ausdruckauswerter verwenden ). Andernfalls können Sie $ReturnValue1 .

Ich habe dies in Visual Studio 2015 Enterprise getestet:

  • Mit deaktivierten Legacy-Auswertungsfunktionen: seulement $ReturnValue1 Werke
  • Mit aktivierten Legacy-Auswertungsfunktionen: beide $ReturnValue et $ReturnValue1 Arbeit

3 Stimmen

Dies scheint nicht mehr notwendig zu sein. Bei VS 2015 Update 3 habe ich die Legacy-Auswerter deaktiviert und $ReturnValue funktioniert. Der Rückgabewert erscheint jedoch nirgends, wenn Sie die Option Use managed compatibility mode Debugging-Option aktiviert.

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