2009-11-09 149 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。