Übernehmen Sie die folgende Funktion:
DataTable go() {
return someTableAdapter.getSomeData();
}
Gibt es eine Möglichkeit, den zurückgegebenen Wert zu überprüfen, wenn ich in dieser Funktion einen Haltepunkt setze? go()
ist direkt mit einem Datagrid auf einer .aspx
Seite verbunden.
Die einzige Möglichkeit, die zurückgegebene Datentabelle zu überprüfen, besteht in der Verwendung einer temporären Variablen. Das ist jedoch etwas unpraktisch. Gibt es nicht einen anderen Weg?
c#
visual-studio
visual-studio-debugging
Doekman
quelle
quelle
Antworten:
Nicht, dass ich davon Wüste. Beachten Sie, dass , wenn Sie tun eine Variable hinzuzufügen, wird es durch den Compiler in Version baut ohnehin entfernt bekommen ...
Update: Diese Funktionalität wurde zu VS2013 hinzugefügt . Sie können die Rückgabewerte in den Auto-Fenstern sehen oder
$ReturnValue
im Watch / Instant-Fenster verwenden.Der Wert kann nur direkt nach der Rückkehr von der Funktion angezeigt werden. Der einfachste Weg, darauf zuzugreifen, besteht darin, einen Haltepunkt auf den Funktionsaufruf zu setzen und den Aufruf zu überspringen (F10).
Update für VS2015: boo! Leider scheint es nicht in VS2015 (devenv v14)
Update für VS2017 zu sein: Es ist zurück. (devenv v15)
quelle
Dies kann in Visual Studio 2013 mit CLR 4.5.1 gemäß der Kundenfeedback-Site erfolgen . Es war in früheren Versionen für C # nicht verfügbar.
(Visual Studio 2008 und früher haben es für VB.NET unterstützt. Es war immer für C / C ++ - Entwickler verfügbar.)
quelle
Ich bin damit einverstanden, dass dies eine sehr nützliche Sache ist: Sie müssen nicht nur den Rückgabewert der Methode sehen, bevor Sie sie verlassen, sondern auch den Rückgabewert der Methoden, die ich gerade überschritten habe. Ich habe es als Teil einer kommerziellen Erweiterung von Visual Studio namens " OzCode " implementiert .
Damit können Sie Methodenrückgabewerte direkt im Code-Editor als eine Art HUD-Anzeige anzeigen:
Weitere Informationen finden Sie in diesem Video .
quelle
Laut Microsoft gibt es keine Möglichkeit, dies mit verwaltetem Code zuverlässig zu implementieren. Dies ist ein Problem, das sie kennen und an dem sie arbeiten:
https://connect.microsoft.com/VisualStudio/feedback/details/597933/add-a-return-pseudo-variable-to-the-visual-studio-debugger-for-net-code
quelle
In Bezug auf Visual Studio 2015:
Nach der derzeit akzeptierten Antwort von Marc Gravell:
In dieser Antwort wurde auch angegeben, dass diese Funktionalität in Visual Studio 2015 nicht funktioniert. Dies ist nicht (vollständig) wahr. Bei der Überprüfung der Rückgabewerte von Methodenaufrufen wird der folgende Hinweis angezeigt:
Ich habe dies in Visual Studio 2015 Enterprise getestet:
quelle
$ReturnValue
funktionieren. Der Rückgabewert wird jedoch nirgendwo angezeigt, wenn Sie dieUse managed compatibility mode
Debugging-Option aktiviert haben.Wenn Sie zum Menü Extras → Optionen , IntelliTrace gehen und die Einstellung ändern, um Ereignisse und Anrufinformationen zu erfassen.
Sie können zum vorherigen Aufrufereignis ( Ctrl+ Shift+ F11) zurückkehren und den vom Methodenaufruf zurückgegebenen temporären Wert im Auto-Fenster als untergeordnetes Element des Methodennamens anzeigen.
Hier wird nicht der Rückgabewert für die Methode angezeigt, in der Sie sich befinden. Es wird nur der Rückgabewert der zuletzt in der aktuellen Methode aufgerufenen Methode angezeigt.
Also ist es gut für
wie es Ihnen den Rückgabewert für zeigt
someTableAdapter.getSomeData()
.Aber nicht für:
quelle
Alter Trick aus der Zeit vor .NET: Öffnen Sie das Registerfenster und sehen Sie sich den Wert des EAX-Registers an. Dies enthält den Rückgabewert der zuletzt aufgerufenen Funktion.
quelle
Verlassen Sie die go () -Methode mit Shift-F11 und zeigen Sie dann im Debug-Fenster "Autos" den Rückgabewert des Methodenaufrufs an, der gerade vom Stapel gesprungen ist (in diesem Fall die go () -Methode) was du willst). Dies ist das Verhalten in Visual Studio 2005. Ich habe Visual Studio 2008 nicht verwendet, daher weiß ich nicht, ob sich dies in dieser Version genauso verhält.
quelle
Ja, es gibt einen sehr schönen Weg. Ein wesentlicher Nachteil ist, dass Sie 5, vielleicht 6 Jahre warten müssen. Da ich sehe, dass Sie im November 2008 gepostet haben, schlage ich vor, dass Sie waaaaaa ...
... aaaait. Und voilà! Nur für Sie hat MS das neueste Visual Studio 2013 veröffentlicht, bei dem es sich um eine Standardfunktion handelt, auf die über die Menüs zugegriffen werden kann, während sie im Debug-Modus ausgeführt werden (Menü Debug → Windows → Autos ).
quelle
Es gibt viele Problemumgehungen, aber keine scheint zufriedenstellend zu sein.
Um John Skeet unten zu zitieren (Kommentar zu einer jetzt gelöschten Antwort):
Theoretisch könnte der Debugger eine
return
-variable haben. Immerhin: Es ist nur eine Variable auf dem Stapel:Betrachten Sie dies als eine Funktionsanforderung für Visual Studio.
quelle
Ich wollte die Antwort von PascalK erweitern , damit dies in Visual Studio 2015 funktioniert, da es eine versteckte Funktion gibt, die in Untersuchen der Rückgabewerte von Methodenaufrufen nicht dokumentiert ist .
Wenn Sie verschachtelte Funktionsaufrufe haben, werden die Pseudovariablen
$ResultValueX
automatisch erstellt, wobei sich das X auf die Funktionsaufrufreihenfolge bezieht. Wenn Sie also einen Aufruf wie habenMultiply(Five(), Six())
, werden die folgenden Pseudovariablen erstellt:quelle
Microsoft Visual C ++ hat dies früher getan, Visual Studio jedoch nicht AFAIK .. :(
quelle
Die einzige Möglichkeit, die ich kenne, besteht darin, einen Haltepunkt in die Rückgabezeile zu setzen, dann das Quick Watch- Fenster aufzurufen und den zurückgegebenen Ausdruck einzugeben:
Dies funktioniert jedoch nur, wenn der Aufruf den Status eines Objekts nicht ändert (da dieselbe Methode erneut aufgerufen wird, wenn Sie die Ausführung fortsetzen).
quelle
Sie können auch fragen, ob der Wert im Zwischenfenster ausgewertet werden soll, wenn keine Flags oder andere Variablen gesetzt werden, sondern nur etwas zurückgegeben wird.
quelle
Ich denke, Sie können dies feststellen, indem Sie das RAX-Register im Registerfenster (Debug / Windows / Register) betrachten. Überprüfen Sie nach dem Verlassen der Funktion (UMSCHALT + F11) das RAX-Register. Ich weiß es nicht genau, aber wenn es einmal Mond war, konnten Sie ein Register überprüfen (vor .NET Tagen) und dort den Rückgabewert sehen. Es könnte sogar eine Kombination aus RAX und RBX usw. sein.
quelle
Wenn Sie das Fenster Debug → Autos öffnen, werden Sie geschlossen. Es wird nicht der tatsächliche Rückgabewert angezeigt, aber es wird angezeigt, was in der return-Anweisung ausgewertet wurde.
quelle
return x + y;
Ich meinte, wenn Sie in dieser Zeile einen Haltepunkt setzen, zeigt Ihr Debug-Autos-Fenster die aktuellen Werte für x und y an. Wie gesagt, es bringt dich nur in die Nähe. Ich versuche nur hilfreich zu sein. Ich denke nicht, dass das eine Ablehnung verdient.Ja, indem Sie zu VB.NET wechseln. ; 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. Es "funktioniert" wie eine lokale Variable, die zu Beginn der Funktion implizit deklariert wird, und ihr aktueller Wert wird auch als Rückgabewert verwendet, wenn die Funktion über ein Non-Return-Anweisungsmittel beendet wird (dh
Exit Function
oder nur durchfällt) und natürlich, wenn Die return-Anweisung wird verwendet.Es wird auch auf den Ausdruck der return-Anweisung gesetzt. Genau wie bei einer lokalen Variablen kann ihr Wert an jedem Ausführungspunkt innerhalb der Funktion überprüft werden (auch nachdem die return-Anweisung ausgeführt wurde). C # hat das nicht und sollte.
Diese kleine VB.NET-Funktion (plus die
Exit Function
Anweisung, die sie aktiviert - eine andere Funktion, die C # nicht hat und sollte) ist sehr nützlich in einer Form der defensiven Programmierung, die ich praktiziere und bei der ich den Funktionsnamen immer mit dem Fehler- / Standardwert als initialisiere erste Aussage. Dann kann ich an jedem Fehlerpunkt (der normalerweise viel häufiger auftritt als Erfolgspunkte) einfach dieExit Function
Anweisung aufrufen (dh ohne den Fehler- / Standardausdruck oder sogar einen Konstanten- / Variablennamen duplizieren zu müssen).quelle
Die akzeptierte Antwort funktioniert mit Visual Studio 2015 nicht ordnungsgemäß. Wenn Sie jedoch einen Haltepunkt in die letzte Zeile der Methode setzen und drücken F10, werden alle Ausdrücke des Rückgabewerts in das lokale Fenster eingefügt.
quelle
Sie können versuchen, auszuwählen
"someTableAdapter.getSomeData();"
, mit der rechten Maustaste darauf zu klicken und sich für die Schnellüberwachung zu entscheiden .quelle
Ziehen Sie den Rückgabeausdruck per Drag & Drop in ein Überwachungsfenster.
Zum Beispiel in der Anweisung
Drag & Drop
in ein Überwachungsfenster, und Sie sehen den Wert.
Sie können dies für jeden Ausdruck tun.
quelle