2008-10-02 19 views
4

在Visual Studio 2008中使用C#並逐步完成調試器中的函數我到達函數的末尾,並在最後的大括號}並即將返回。有沒有辦法找出該函數即將返回的值?如何在VS2008中調試時發現函數末尾的返回值?

如果返回值的計算,如這是必要的:

return (x.Func() > y.Func()); 

回答

4

它有點低級,但是如果您切換到反彙編,那麼您可以單步執行指令並查看返回值設置爲什麼。它通常設置在@eax寄存器中。

如果您不想單步執行,您可以在ret指令上放置一個斷點並檢查寄存器。

+0

當你看到例如EAX = 000001C9,您必須使用calc來查看它是否意味着457. – Gerard 2011-04-08 10:01:20

2

你可以把

(x.Func() > y.Func()) 

在監視窗口,以評估它,看到的結果。除非聲明是

return ValueChangesAfterEveryCall(); 

你應該沒問題。

+2

如果x.Func()或y.Func()有副作用,這不是一個好主意。例如,「返回Database.CreateNewItemAndReturnItsID(someFoo)」。如果您將其複製到監視窗口中,您最終會敲擊數據庫兩次。 – 2008-10-03 14:28:22

2

我仍然使用VS 2003與C++,所以這可能會或可能不適用。如果您使用「自動」選項卡(靠近「本地」和「監視」選項卡),它會告訴您函數的返回值。

+0

不幸的是,在C#中情況並非如此。自動標籤不太有用。這是一個恥辱。 – 2008-10-02 23:27:57

+0

如何啓用自動標籤?我看到當地人和看標籤,但找不到自動標籤... – Guy 2008-10-03 16:26:52

1

我實際上建議重構代碼以將各個函數返回放在局部變量中。這樣,在調試代碼以找出特定評估時,您和其他人不必跳過這些環節。通常,這會產生更易於調試的代碼,因此更易於其他人理解和維護。

int sumOfSomething = x.Func(); 
int pendingSomethings = y.Func(); 
return (sumOfSomething > pendingSomethings); 
3

我爲Visual Studio的商業擴展名爲BugAid(目前處於測試階段),做你問什麼。

在您的例子,它會告訴你這一點:

Statement Visualization

它的方式是通過利用您的代碼調試它,使我們能夠同時檢索的返回值調用「 Func「,從而得出表達式x.Func() > y.Func()是否爲真。請參閱我的blog post on the subject

相關問題