Finde ich den return Wert vor der Rückkehr beim Debuggen in Visual Studio?
Nehmen Sie die folgende Funktion:
DataTable go() {
return someTableAdapter.getSomeData();
}
Wenn ich einen Haltepunkt in diese Funktion, gibt es eine Möglichkeit zu prüfen ist der zurückgegebene Wert? go()
ist direkt gekoppelt an ein datagrid in einem .aspx
Seite.
Nur so zu untersuchen das zurückgegebene datatable ist eine temporäre variable. Allerdings ist das ein wenig unbequem. Gibt es nicht einen anderen Weg?
Sie können eine Uhr, wenn Sie wieder auf dem Aufruf-stack
Sie werden in der Lage, dies zu tun in VB6, die ich zu erinnern scheinen. Aber zurück dann die syntax für die beteiligten Funktionen Einstellung der Funktion, die den Wert der return-Wert...
Kommentar für Visual C++ - Benutzer: Geben Sie $ReturnValue in das Direktfenster oder das Watch-Fenster. Zumindest auf meinem VS 2010 und es hat funktioniert!
Für VS2015 $ReturnValue1 .. incase Sie nicht wollen, zu Lesen, durch die 20 Antworten und 100 Kommentare unten!
Was ist der 2019 Antwort auf all das? Diese Antworten sind super datiert.
Sie werden in der Lage, dies zu tun in VB6, die ich zu erinnern scheinen. Aber zurück dann die syntax für die beteiligten Funktionen Einstellung der Funktion, die den Wert der return-Wert...
Kommentar für Visual C++ - Benutzer: Geben Sie $ReturnValue in das Direktfenster oder das Watch-Fenster. Zumindest auf meinem VS 2010 und es hat funktioniert!
Für VS2015 $ReturnValue1 .. incase Sie nicht wollen, zu Lesen, durch die 20 Antworten und 100 Kommentare unten!
Was ist der 2019 Antwort auf all das? Diese Antworten sind super datiert.
InformationsquelleAutor doekman | 2008-11-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht, dass ich wüsste. Beachten Sie, dass wenn Sie tun eine variable hinzufügen, wird es vom compiler entfernt in release-builds sowieso...
Update:
Diese Funktionalität wurde Hinzugefügt, um VS2013.
Sehen Sie die return-Werte in den autos von windows, oder verwenden Sie
$ReturnValue
im Uhr - /Direktfenster.Der Wert kann nur gesehen werden, direkt nach der Rückkehr aus der Funktion, so ist die einfachste Möglichkeit, ist es, indem Sie einen breakpoint auf den Aufruf einer Funktion und step over (F10) aufrufen.
Update für VS2015: boo! leider, es scheint nicht in VS2015 (devenv v14)
Update für VS2017: es ist zurück. (devenv v15)
Es ist möglich, da die VS 2010 mit IntelliTrace: blogs.msdn.com/b/habibh/archive/2009/10/23/...
Intellitrace ist verfügbar in VS-Ultimate-Edition.
Ihre Antwort ist falsch! Sicher, es hat mich sechs Jahre zwischen Ihrer Antwort und MS die Freigabe, die Funktion in VS13, aber trotzdem. Wenn Sie möchten, nur noch "die Zeit" als disclaimer... (Nein, ich bin nicht zurückgeblieben. Es ist ein Witz, natürlich. Du bist godlike, mate.)
für VS2015: $ReturnValue1 funktioniert! (getestet in der ultimate-version)
InformationsquelleAutor Marc Gravell
Dies kann in Visual Studio 2013 mit CLR 4.5.1 nach dem feedback der Kunden Website. Es war nicht verfügbar in früheren Versionen für C#.
(Visual Studio 2008 und früher unterstützte es für VB.NET. Es hat immer auch zu C/C++ - Entwickler.)
Microsoft Connect sagt, es ist ein fundamentales Problem mit verwaltetem code, die verhindert, dass die Umsetzung dieser in einer zuverlässigen Art und Weise:
Die Worte, die Sie verwenden, sind "wir konnten nicht das richtige zu tun konsequent" (VS11), aber Sie "wollen, bringen Sie diese zurück" und "Blick auf eine Anzahl möglicher Lösungen für dieses problem".
Die connect-Eintrag veraltet ist. Die Funktion scheint zu sein ... aufgegeben :(((
Es ist möglich, da die VS 2010 mit IntelliTrace: blogs.msdn.com/b/habibh/archive/2009/10/23/...
InformationsquelleAutor Alex Angas
Ich bin damit einverstanden, dass dies eine sehr nützliche Sache zu haben: nicht nur sehen Sie den Rückgabewert der Methode vor dem aussteigen, aber sehen auch den Rückgabewert von Methoden, die ich gerade eben über. Implementiert habe ich es als Teil einer kommerziellen Erweiterung zu Visual Studio namens "OzCode".
Mit es, Sie können die Ansicht-Methode return-Werte direkt auf dem code-editor, wie eine Art HUD-display:
Weitere Informationen, bitte sehen dieses video.
InformationsquelleAutor Omer Raviv
Laut Microsoft gibt es keine Möglichkeit dies umzusetzen zuverlässig mit managed code. Dies ist ein problem, Sie sind sich dessen bewusst und arbeiten:
https://connect.microsoft.com/VisualStudio/feedback/details/597933/add-a-return-pseudo-variable-to-the-visual-studio-debugger-for-net-code
InformationsquelleAutor Dan Solovay
Gemäß der derzeit akzeptierte Antwort von Marc Gravell:
Diese Antwort auch darauf hingewiesen, dass diese Funktionalität funktioniert nicht in Visual Studio 2015. Dies ist nicht (völlig) wahr. Auf Prüfen Rückgabewerte der Methodenaufrufe gibt es folgenden Hinweis:
Getestet habe ich dies in Visual Studio 2015 Enterprise:
$ReturnValue
funktioniert. Aber der return-Wert nicht angezeigt wird, wenn Sie dieUse managed compatibility mode
debugging-option aktiviert.InformationsquelleAutor PascalK
Wenn Sie gehen, um in das Menü Tools → Optionen, IntelliTrace, und ändern Sie die Einstellung zum erfassen von Ereignissen und Informationen abrufen.
Können Sie gehen Sie zurück zur vorherigen Aufruf-Ereignis (Strg + Shift + F11) und finden Sie den temporären Wert, der beim Aufruf der Methode zurückgegeben in die autos Fenster, wie ein Kind den Namen der Methode.
Diese nicht angezeigt, in der Sie den Rückgabewert für die Methode, die Sie sind in. Es zeigt nur, dass Sie den Rückgabewert der letzten Methode aufgerufen, in der aktuellen Methode.
So, es ist in Ordnung für
als es zeigt, dass Sie den Rückgabewert für
someTableAdapter.getSomeData()
.Aber nicht für:
InformationsquelleAutor Ross Buggins
Alter trick aus der pre .NETTO-Tage: Öffnen Sie das Register Fenster und schaue auf den Wert des EAX-Registers. Diese enthält den Rückgabewert der letzten Funktion, die aufgerufen wird.
InformationsquelleAutor ColinM
Schritt aus der go () - Methode mit Shift-F11 und dann in den "Autos" debug-Fenster zeigt es den Rückgabewert der Methode aufrufen, die kam einfach aus dem Stapel (in diesem Fall die go () - Methode, die ist, was Sie wollen). Dies ist das Verhalten in Visual Studio 2005; ich habe nicht verwendet Visual Studio 2008 also ich weiß nicht, ob dies verhält sich in dieser version.
Ich würde erwarten, dass die Autos-Fenster leer zu sein, während im INNEREN der go () - Funktion. Sie müssen Schritt VOLLSTÄNDIG AUS der Funktion (d.h. der debug-cursor zeigen sollte, um die Funktion AUFGERUFEN hat go()) und dann sollten Sie die return Werte für gehen() im Auto-Fenster.
kann nicht ankommen dieses zu wirken, sogar mit extra-Hinweis. Sind Sie versuchen, dies in Visual Basic? Es scheint eine bessere Unterstützung für das beobachten und ändern, die Werte zurückgeben...
Nein, tut es nicht in C#. P. S. Wow, ich brauchte eine Weile, um zu sehen, dieses wieder.
Funktioniert nicht in VS 2010 C#
InformationsquelleAutor LeopardSkinPillBoxHat
Ja, es ist eine sehr schöne Art und Weise. Ein erheblicher Nachteil ist, dass Sie würde warten müssen, für 5, vielleicht 6 Jahre. Da ich sehe, dass du gepostet im November 2008, schlage ich vor, dass Sie waaaaaa...
...aaaait. Und voilà! Nur für Sie, MS hat veröffentlicht die neueste Visual Studio 2013, wo es ist ein Standard-feature, erreichbar von den Menüs während der Ausführung im debug-Modus (Menü Debug → Windows → Autos).
Hatte dieses Problem heute. Vielen Dank für die Beantwortung im Jahr 2014, obwohl die erste Ausgabe ist von 2008. Ihre Antwort ist das, was ich suchte.
Keine Probleme. Fühlt sich ein bisschen wie ein time machine finden Sie in diesem Beitrag. Explosion aus der Vergangenheit, hehe.
InformationsquelleAutor Konrad Viltersten
Gibt es viele workarounds, aber keiner scheint zufriedenstellend.
Zitat John Skeet unten (Kommentar auf eine mittlerweile gelöschte Antwort):
In der Theorie, könnte der debugger eine
return
-variable. Nach allem: es ist nur eine variable auf dem stack:So betrachten Sie dieses eine feature-Anfrage für Visual Studio.
Ich bin mir nicht sicher, wie die CLR arbeitet, aber viele Compiler stellen Funktionsargumente auf den stack unterhalb der stack-pointer (sp), und lokale Variablen auf dem stack, über den stack-pointer. Das ist genau das, was ich versuche zu zeigen. Und OK, wenn der Rückgabewert eine Referenz geben, die Sie nur bekommen einige Zeiger-Wert.
Es ist nicht unbedingt auf den stack. In der Tat, wenn Sie die Debug-Ansicht -> Register sind Sie apt zu sehen, es in EAX
InformationsquelleAutor doekman
Microsoft Visual C++ verwendet, um dies zu tun, aber Visual Studio ist es nicht AFAIK.. 🙁
InformationsquelleAutor Sprintstar
Der einzige Weg, ich weiß, ist, platzieren Sie einen breakpoint auf das return-Zeile und rufen Sie dann die Schnell Anschauen - Fenster und geben Sie die zurückgegebene Ausdruck:
Aber das funktioniert nur, wenn der Aufruf nicht ändern den Zustand eines Objekts (da wird es einen zweiten Aufruf der gleichen Methode, wenn Sie fortsetzen der Ausführung).
InformationsquelleAutor Sylvain Rodrigue
Wollte ich ausbauen PascalK Antwort für immer diese Arbeit in Visual Studio 2015, da gibt es eine versteckte Funktion, die nicht dokumentiert Prüfen Rückgabewerte der Methodenaufrufe.
Wenn Sie verschachtelte Funktionsaufrufe, die pseudo-Variablen
$ResultValueX
werden automatisch erstellt, wobei das X bezieht sich auf die Funktion aufrufen, um. Also, wenn Sie einen Anruf wieMultiply(Five(), Six())
folgende pseudo-Variablen erstellt:InformationsquelleAutor splttingatms
Können Sie auch Fragen zur Bewertung der Wert in der mittleren Fenster auch, wenn es nicht durch Fahnen oder andere Variablen, aber nur etwas zurückgibt.
Sie müssen das lambda in der Frage, wie ich das Direktfenster verwenden auch manchmal
InformationsquelleAutor Biri
Ich denke, Sie können dies bestimmen, indem man die RAX-register in dem Register-Fenster (Debug /Windows /Register). Nach stepping out (SHIFT + F11) der Funktion, prüfen der RAX-register. Ich weiß nicht, für eine Tatsache, aber einmal auf einem Mond, die Sie könnte prüfen, ein register (pre .NETTO-Tage) und sehen Sie die return-Wert gibt. Es könnte sogar eine Kombination von RAX und RBX, etc.
InformationsquelleAutor Joe Rattz
Öffnen der Debug - → Autos-Fenster wird Sie schließen. Sie zeigen nicht den tatsächlichen Wert zurück, aber es wird sich zeigen, was ausgewertet wurde, die in der return-Anweisung.
return x + y;
Was ich meinte war, wenn Sie einen Haltepunkt auf diese Zeile, dann wird Ihr Debug-Autos-Fenster zeigt die aktuellen Werte für x und y ein. Wie ich schon sagte, es nur zu bekommen ist, Sie zu schließen. Nur versuchen, hilfreich zu sein. Ich glaube nicht, dass verdient ein downvote.InformationsquelleAutor GeekyMonkey
Ja, durch die Umstellung auf VB.NET. ;P (Du hast gerade sagen, "Visual Studio". 😉
Solange ich mich erinnern kann (von Visual Basic über alle Versionen VB.NET), können Sie einfach eine Abfrage der name der Funktion. Es "funktioniert", wie eine lokale variable, die implizit deklariert am Anfang der Funktion und der aktuelle Wert ist der Rückgabewert, wenn die Funktion beendet wird über die non-return-Anweisung bedeutet (d.h.
Exit Function
oder einfach nur durch zu fallen) und natürlich, wenn die return-Anweisung verwendet wird.Ist es auch die Anweisung return Ausdruck. Genau wie eine lokale variable, die Ihren Wert untersucht werden kann an jedem Punkt der Ausführung innerhalb der Funktion (auch nach der return-Anweisung ausgeführt wird). C# hat dies nicht und sollten.
Dass wenig VB.NET feature (plus die
Exit Function
- Anweisung, die es ermöglicht - ein weiteres feature von C# nicht und sollte) ist sehr nützlich, in form von defensive Programmierung ich die Praxis, wo ich immer initialisieren Sie den Namen der Funktion, um die Störung/der default-Wert als die erste Anweisung. Dann, an irgendeinem Punkt scheitern (die normalerweise Auftritt, viel häufiger als der Erfolg Punkte), kann ich rufen Sie einfach dieExit Function
- Anweisung (also ohne duplizieren Sie die Störung /der Standard-Ausdruck oder sogar eine Konstante/variable-name).InformationsquelleAutor Tom
Die akzeptierte Antwort funktioniert nicht mit Visual Studio 2015, sondern indem Sie einen Haltepunkt in der letzten Zeile der Methode und drücken die Taste F10, werden alle Ausdrücke, die den Rückgabewert in das Fenster.
InformationsquelleAutor Esben Skov Pedersen
Könnten Sie versuchen, zu wählen
"someTableAdapter.getSomeData();"
, der rechten Maustaste darauf, und gehen Sie für Schnell Anschauen.InformationsquelleAutor Yann Semet
Drag-and-drop der return-Ausdruck in ein watch-Fenster.
Beispielsweise in der Anweisung
drag-and-drop
in ein watch-Fenster, und sehen Sie den Wert.
Können Sie für einen beliebigen Ausdruck.
Und überwachungsausdrücke können keine lambda-Ausdrücke, die ich verwenden ein gutes Stück.
InformationsquelleAutor Pita.O