Frage

Nehmen Sie die folgende Funktion:

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

Wenn ich einen Haltepunkt in dieser Funktion gesetzt ist, besteht die Möglichkeit, den zurückgegebenen Wert zu untersuchen? go() ist direkt mit einem Datagrid in einer .aspx Seite.

Der einzige Weg, die zurückgegebenen Datentabelle zu inspizieren ist eine temporäre Variable zu verwenden. Allerdings, das ist ein wenig unbequem. Gibt es nicht einen anderen Weg?

War es hilfreich?

Lösung

Nicht, dass ich wüsste. Beachten Sie, dass tun eine Variable hinzuzufügen, wird es durch den Compiler in Version entfernt bekommen baut sowieso ...

Update: Diese Funktionalität wurde hinzugefügt VS2013 . Sie können die Rückgabewerte in den Autos Fenster sehen oder $ReturnValue in der Uhr / sofort Fenster verwenden.

Der Wert kann nur direkt nach dem so von der Funktion, die Rückkehr des einfachste Weg, indem sie einen Haltepunkt für den Zugriff zu sehen auf dem Funktionsaufruf ist und Schritt über (F10) den Anruf an.


Update für VS2015: Boo! leider scheint es nicht in VS2015 (devenv v14) zu sein
Update für VS2017: es ist zurück. (Devenv v15)

Andere Tipps

Dies kann in Visual Studio 2013 mit CLR 4.5.1 nach der Kunden-Feedback-Website . Es war in früheren Versionen für C # nicht zur Verfügung.

(Visual Studio 2008 und früher für VB.NET unterstützt. Es ist schon immer vorhanden gewesen, C / C ++ Entwickler.)

Ich bin damit einverstanden, dass dies eine sehr nützliche Sache ist zu haben: nicht nur den Rückgabewert des Verfahrens zu sehen, bevor er aus sie trete, sondern auch den Rückgabewert von Methoden da ich über gerade abgestuft. Ich setzte sie als Teil eines kommerziellen Erweiterung zu Visual Studio namens " OzCode ".

Mit ihm können Sie die Methode Rückgabewert direkt auf dem Code-Editor, als eine Art von HUD-Display anzuzeigen:

Statement Visualisierung

Weitere Informationen finden Sie dieses Video .

Laut Microsoft gibt es keine Möglichkeit, dies mit verwaltetem Code zuverlässig zu implementieren. Dies ist ein Problem, das sie bewusst sind und arbeiten an:

  

Denn es diejenigen aus, die Erfahrung Debuggen native C ++ haben oder VB6-Code, können Sie eine Funktion verwendet haben, wo Funktion Rückgabewerte werden für Sie im Fenster Auto zur Verfügung gestellt. Leider ist diese Funktionalität nicht für verwalteten Code vorhanden ist. Während Sie, um dieses Problem durch die Zuordnung der Rückgabewerte zu einer lokalen Variablen arbeiten können, ist dies nicht so praktisch, weil es Ihren Code erfordert ändern.   In verwalteten Code, ist es viel schwieriger zu bestimmen, was der Rückgabewert einer Funktion, die Sie über getreten habe. Wir erkennen, dass wir nicht das Richtige konsequent hier tun konnten, und so entfernten wir die Funktion eher als Ihnen falsche Ergebnisse im Debugger geben. Allerdings wollen wir diese wieder für Sie und unsere CLR und Debugger-Teams bringen sind an mehreren möglichen Lösungen für dieses Problem suchen. Leider wird dies nicht 11 Teil von Visual Studio sein.

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

Nach der derzeit akzeptierten Antwort von Marc GRA:

  

Das Funktionalität zu Visual Studio 2013 wurde hinzugefügt. Sie können die Rückkehr sehen   Werte in dem Autos Fenster oder Verwendung $ Return in der Uhr / sofort   Fenster

Diese Antwort stellte auch fest, dass diese Funktionalität nicht in Visual Studio 2015 ist nicht (vollständig) wahr funktioniert. Auf Rückgabewerte Untersuchen von Methodenaufrufen gibt es die folgende Anmerkung:

  

Sie müssen die Legacy-Ausdrucksauswertungen für eingeschaltet haben $ Return erkannt werden (Extras / Optionen / Debugging / Verwenden Sie die Legacy-C # und VB Ausdruck Evaluatoren ). Andernfalls können Sie $ ReturnValue1 .

Getestet habe ich diese in Visual Studio 2015 Unternehmen:

  • Mit Legacy-Ausdrucksauswertungen ausgeschaltet: nur $ ReturnValue1 funktioniert
  • Mit Legacy Ausdruck Gutachter eingeschaltet: beide $ Return und $ ReturnValue1 Arbeit

Wenn Sie zum Menü gehen Extras Optionen , IntelliTrace, und die Einstellung ändern Ereignisse zu sammeln und rufen Informationen.

Sie können zum vorherigen Rufereignis zurück ( Strg + Umschalttaste + F11 ) und sieht der temporäre Wert aus dem Methodenaufruf zurückgegeben im Fenster Auto als Kind des Methodennamen.

Dies ist nicht den Rückgabewert für die Methode zeigt, in Sie sind. Es zeigt Ihnen nur den Rückgabewert der letzten Methode in der aktuellen Methode genannt.

Also, es ist in Ordnung für

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

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

Aber nicht für:

int go(){return 100 * 99;}

Alter Trick von dem Pre .NET Tagen: die Register Fenster öffnen und auf dem Wert des EAX-Registers suchen. Diese enthält den Rückgabewert der letzten Funktion aufgerufen.

Beim Heraustreten aus dem Sprung () -Methode Umschalt-F11 verwendet wird, und dann in dem „Autos“ Debug-Fenster wird es den Rückgabewert des Methodenaufrufes zeigen, die gerade von dem Stapel genommene (in diesem Fall der go () Methode das ist, was Sie wollen). Dies ist das Verhalten in Visual Studio 2005; Ich habe nicht Visual Studio 2008 so verwendet, ich weiß nicht, ob dies die gleiche Art und Weise in dieser Version verhält.

Ja, es gibt eine sehr schöne Art und Weise. Ein wesentlicher Nachteil ist, dass Sie für 5, vielleicht 6 Jahre warten müssten. Da ich sehe, dass Sie im November 2008 veröffentlicht, schlage ich vor, dass Sie Waaaaaa ...

... aaaait. Und voila! Nur für Dich hat MS das neueste Visual Studio 2013 veröffentlicht , wo es eine Standard-Funktion zugänglich aus den Menüs beim Laufen im Debug-Modus (Menü Debug Fenster Autos ).

Es gibt eine Menge von Abhilfen, aber keiner scheint zufrieden stellend.

John Skeet unten (Kommentar auf einer inzwischen gelöschten Antwort) zu zitieren:

  

sieht immer noch unbequem für mich -   vor allem, wenn Sie nicht wissen, was   Rückgabewert Sie gehen zu müssen   bevor Sie das Debuggen. Ich [...] wirklich   wollen nicht eine vorübergehende haben zu haben,   Variable meinen Code unübersichtlich jeder   Mal, dass ich zurückkehren anything.t

In der Theorie könnte der Debugger einen return-Variable hat. Immerhin: es ist nur eine Variable auf dem Stapel:

unsafe {
  int * sp = stackalloc int[1];
  try {
    return a+b;
  }
  finally {
    Trace.WriteLine("return is " + *(sp+3));
  }
}

Sehen Sie also dieses eine Feature-Anfrage für Visual Studio.

Microsoft Visual C ++ verwendet, dies zu tun, aber Visual Studio nicht AFAIK ..: (

Der einzige Weg, ich weiß, ist, einen Haltepunkt auf der Rückleitung zu setzen und rufen Sie dann die Schnell Uhr Fenster und geben Sie den Ausdruck zurückgegeben:

someTableAdapter.getSomeData();

Das funktioniert aber nur, wenn der Anruf nicht den Zustand eines Objekts ändert (da wird es einen zweiten Aufruf der gleichen Methode, wenn Sie die Ausführung wieder aufnehmen wird).

Ich wollte auf PascalK Antwort für diese immer in Visual Studio 2015 zu arbeiten, weil es eine versteckte Funktion ist, die dokumentiert ist nicht in Überprüfen Sie die Rückgabewerte von Methodenaufrufen .

Wenn Sie Funktionsaufrufe geschachtelt haben, die pseudo-Variablen $ResultValueX werden automatisch erstellt, in dem die X auf den Funktionsaufruf, um verweist. Also, wenn Sie einen Anruf wie Multiply(Five(), Six()) haben, werden die folgenden Pseudo-Variablen erstellt:

Five()     | $ResultValue1 = 5
Six()      | $ResultValue2 = 6
Multiply() | $ResultValue3 = 30

Sie können auch fragen Sie den Wert im Zwischenfenster als auch zu bewerten, wenn sie Fahnen oder andere Variablen nicht gesetzt, sondern liefert nur etwas.

Ich glaube, Sie dies, indem man das RAX-Register im Fenster Register bestimmen können (Debug / Windows / Register). Nach dem Heraustreten (SHIFT + F11) der Funktion, überprüfen Sie die RAX-Register. Ich weiß nicht, für eine Tatsache, aber einmal auf einen Mond konnte man ein Register (pre .NET Tage) überprüfen und den Rückgabewert dort sehen. Es könnte sogar eine Kombination von RAX und RBX sein, etc.

Öffnen des Debug → Autos Fenster bekommt man schließen. Es wird den tatsächlichen Rückgabewert nicht zeigen, aber es wird zeigen, was in der return-Anweisung ausgewertet wurde.

Ja, durch zu VB.NET umzuschalten. ; P (Du hast einfach sagen: "Visual Studio";).

Solange ich (von Visual Basic durch alle Versionen von VB.NET) erinnern kann, können Sie einfach die Funktionsnamen abfragen. Es „Funktionen“ wie eine lokale Variable, die auch zu Beginn der Funktion und seinen aktuellen Wert implizit deklariert wird als Rückgabewert verwendet wird, wenn die Funktion über nicht-return-Anweisung Mittel austritt (dh Exit Function oder einfach nur fallen durch) und natürlich, wenn die Return-Anweisung verwendet wird.

Es wird auch auf die Return-Anweisung Ausdruck gesetzt. Genau wie eine lokale Variable, deren Wert kann innerhalb der Funktion (auch nach der Rückkehr-Anweisung ausgeführt wird) an jedem Punkt der Ausführung überprüft werden. C # hat dies nicht und sollte.

Die kleine VB.NET-Funktion (plus die Exit Function Aussage, die es ermöglicht - ein weiteres Merkmal C # nicht hat und soll) ist sehr nützlich in Form von

die akzeptierte Antwort nicht ordnungsgemäß mit Visual Studio 2015, aber indem sie einen Haltepunkt in der letzten Zeile des Verfahrens und Drücken von F10 , wird es setzt alle Ausdrücke funktioniert der Rückgabewert in das Lokalfenster.

Sie könnten versuchen, "someTableAdapter.getSomeData();" auszuwählen, direkt darauf klicken, und gehen Sie für Schnell Uhr .

Drag & Drop die Rückkehr Ausdruck in ein Überwachungsfenster.

Zum Beispiel in der Anweisung

return someTableAdapter.getSomeData();

Drag & Drop

someTableAdapter.getSomeData()

in ein Beobachtungsfenster, und Sie werden den Wert sehen.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top