2009-11-09 55 views
16

即使該值未分配給本地變量,是否可以在Visual Studio調試器中獲取方法的返回值?例如,我調試以下代碼:在VS調試器中獲取方法的返回值

public string Foo(int valueIn) 
{ 
    if (valueIn > 100) 
     return Proxy.Bar(valueIn); 
    else 
     return "Not enough"; 
} 

由於我沒有設定任何的Foo局部變量和假設我沒有設置任何中的呼喚富一個破發點,是有辦法如果我在Foo內部有一個斷點(或另一種方式),請查看返回值是什麼?我對Autos或Intermediate窗口沒有太多經驗,所以我不確定這些是否是有效的選項。

+0

另請參閱[這個問題](http://stackoverflow.com/questions/268048/can-i-find-out-the-return-value-before-returning-while-debugging-in-visual-studio) – 2010-09-07 09:26:13

+3

[此功能在VS2013中是新功能](http://blogs.msdn.com/b/visualstudioalm/archive/2013/06/27/seeing-function-return-values-in-the-debugger-in-visual-工作室2013.aspx)。 – shambulator 2013-06-28 07:44:40

+0

[This](http:// stackoverflow。com/questions/268048/can-i-find-out-the-return-before-returning-while-visual-studi)問題也可以提供幫助。 – RBT 2016-11-21 06:24:18

回答

6

您可以在富斷點,打開立即窗口,運行以下命令:

? Foo(valueIn) 

這將打印在立即窗口返回值。

您也可以複製表達式並將其粘貼到Watch窗口中,但只有在確定該調用沒有副作用(否則您可能會得到令人困惑的結果)時我會這樣做。

+12

這將再次執行該功能,這不一定是個好主意。 – SLaks 2009-11-09 22:32:45

+0

使用'$ ReturnValue'在快速監視窗口或立即窗口中使用Visual Studio調試器變量要好得多,沒有風險。看看[這裏](http://stackoverflow.com/questions/268048/can-i-find-out-the-return-value-before-returning-while-debugging-in-visual-studi) – RBT 2016-11-21 06:26:08

2

不,我不知道這樣做的方法。我會在調用者中放置一個斷點並查看那裏的返回值。

5

您可以隨時切換到反彙編視圖並逐步執行各個指令。在執行'ret'指令之前,返回值將位於@eax(或@rax)中。

+0

...或之後!例如。按下F10/Shift-F11 /後,光標返回到父功能。返回值類型時這很好。問題是,這個值可能是一個指針,在沒有解引用的情況下是無用的。 – 2014-01-27 10:05:31

2

您還可以在調試器中高亮顯示任何表達式,然後右鍵單擊 - >快速查看。這將執行表達式(假設它是有效的)並給你價值。

0

您可以隨時使用您的手錶盒來評估功能調用。

Foo(valueIn);

這隻會在你的Proxy.Bar(valueIn)是獨立於時間的情況下起作用。

+0

這個詞你正在尋找的是冪等的。 – SLaks 2009-11-09 22:36:07

0

一種解決方法是使用一個Pascal風格的結果變量:

public string Foo(int valueIn) 
{ 
    string result; 
    if (valueIn > 100) 
     result = Proxy.Bar(valueIn); 
    else 
     result = "Not enough"; 
    return result; 
} 

這是良好的作風在我看來更長的功能。對於像上面那樣的非常短的代碼,可能會被認爲是過分的,但它確實解決了調試器問題。

0

有類似問題的答案: 在VS 2013中,您可以將變量$ ReturnValue添加到手錶。它包含函數的實際返回值。

感謝Jesper Jensen。

相關問題