VIsual Studio - Wie ändere ich den Rückgabewert einer Methode im Debugger?

8

Wenn ich debugge, muss ich oft mit Methoden arbeiten, die keine Zwischenvariable verwenden, um den Rückgabewert zu speichern:

%Vor%

Nun, um einen Fehler neu zu erstellen, muss ich die Werte oft spontan ändern. Hier könnte ich sehen wollen, was passiert, wenn myMethode_1 Null zurückgibt. Dasselbe gilt für myMethod_2 .

Gibt es eine Möglichkeit, das zu tun, ohne den Code zu ändern ? Was ich tun möchte, ist, einen Haltepunkt auf der Rückführungslinie (oder auf der schließenden Klammer) zu platzieren und einen neuen Rückgabewert einzugeben.

Hinweis: Ich verwende Visual Studio 2005 und Visual Studio 2008.

Danke!

    
SRO 19.01.2009, 05:43
quelle

6 Antworten

3

Für diejenigen, die eine Lösung in VB.NET suchen:

Es war so einfach, ich kann nicht glauben, dass ich es nicht gesehen habe: Um den Wert zu sehen, den eine Funktion zurückgeben wird: Einfach den Zeiger über den Namen der Funktion bewegen. Der Wert wird in einem Tooltip angezeigt.

Ändern Sie den Wert: Klicken Sie einfach auf diese QuickInfo, ändern Sie den Wert und drücken Sie die Eingabetaste.

Visual Studio ist sehr cool!

Hinweis: Ich habe es in VB.NET auf Visual Studio Team System 2008 getestet. Ich habe versucht, mit C #, aber es funktioniert nicht ...: - (

    
SRO 19.01.2009, 06:44
quelle
3

Rückgabewerte von Funktionen werden normalerweise im EAX-Register zurückgegeben.

Wenn Sie einen Haltepunkt nur am Ende der Funktion setzen, besteht die Möglichkeit, dass die Änderung von EAX den Rückgabewert ändert. Sie können jedes Register in Visual Studio ändern und anzeigen, indem Sie einfach seinen Namen in das Überwachungsfenster schreiben.
Dies wird wahrscheinlich fehlschlagen, wenn Sie eine Optimierung haben oder wenn die Funktion etwas Einfaches wie return 12 ist. Es wird wahrscheinlich auch nicht funktionieren, wenn Sie etwas zurückgeben, das nicht in ein 32-Bit-Register passt. Zumindest ist es einen Versuch wert.

    
shoosh 19.01.2009 06:18
quelle
1

Warum möchten Sie den Rückgabewert in der aufgerufenen Methode ändern? Sie können es leicht in der Calling-Methode ändern. Sobald Ihre Funktion zurückkehrt, erhalten Sie den zurückgegebenen Wert und dort können Sie ihn ändern.

%Vor%

Auch wenn Sie den Rückgabewert nicht in einer Variablen speichern und ihn direkt an eine andere Methode übergeben, können Sie den Wert ändern, indem Sie in diese Methode wechseln und dort den Argumentwert ändern. Fehle ich hier etwas?

    
Aamir 19.01.2009 06:01
quelle
1

Denke nicht Sie müssen eine Temp-Variable im Aufrufer oder im Aufrufer haben, um den Wert zu bearbeiten, um ihn im Fenster IDE-Debugger / QuickWatch zu ändern. Der einfachste und schnellste Weg wäre also, vorhandenen Code zu kommentieren und eine temporäre Änderung für debug-what-if vorzunehmen.

entweder

%Vor%

Oder

%Vor%

Sieh nicht, dass es die Verschärfung von "Vermeidung einer Codeänderung" wert ist, dies zu tun. Wenn ich FUBAR mache, mache ich eine Kasse und wir sind wieder Gold.

    
Gishu 19.01.2009 06:12
quelle
1

Was Sie brauchen, ist Mocking. Überprüfen Sie Frameworks wie Rhinomock, Moq oder Typemock.

Für die Art von Szenario, das Sie beschreiben, gehe ich davon aus, dass Sie möglicherweise keine saubere vertragsgesteuerte Entwicklung haben und möglicherweise in einem falschen Verhalten / Zustand zurückkehren müssen. In diesem Fall ist Typemock möglicherweise die beste Option für Sie, obwohl es kommerziell ist

    
user35559 19.01.2009 06:53
quelle
-1

Ich denke, Sie können es in Visual Studio machen, aber das fühlt sich für mich schmutzig an.

Meine Gedanken sind, dass Sie wirklich in ein Unit-Testing-Framework schauen sollten, um die Ausgabe von myMethod_2 als 0 zu fälschen und zu sehen, welchen Effekt es auf Ihren Code hat. IMO. Auf diese Weise können Sie den Return 0-Check im Unit-Test durchführen, um sicherzustellen, dass der hässliche Bug nicht mehr nach oben zeigt.

    
Nathan W 19.01.2009 05:54
quelle

Tags und Links