在VS调试器中获取方法的返回值

时间:2009-11-09 22:11:10

标签: c# visual-studio debugging

是否可以在Visual Studio调试器中获取方法的返回值,即使该值未分配给局部变量?例如,我正在调试以下代码:

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

因为我没有在Foo中设置任何局部变量,并假设我没有在任何调用Foo中设置断点,如果我在Foo中有一个断点,有没有办法看看返回值是什么(或另一种方式)?我对Autos或Intermediate窗口没有多少经验,所以我不确定这些是否是有效选项。

8 个答案:

答案 0 :(得分:6)

您可以在Foo中设置断点,打开即时窗口并运行以下命令:

? Foo(valueIn)

这将在立即窗口中打印返回值。

您也可以复制表达式并将其粘贴到Watch窗口中,但只有在我确定该调用没有副作用时才会这样做(否则您会得到令人困惑的结果)。

答案 1 :(得分:5)

您始终可以切换到反汇编视图并逐步执行各个指令。在您执行'ret'指令之前,返回值将在@eax(或@rax)中。

答案 2 :(得分:2)

不,我不知道如何做到这一点。我会在调用者中放置一个断点并查看那里的返回值。

答案 3 :(得分:2)

您还可以在调试器中突出显示任何表达式,然后右键单击 - >快速观看。这将执行表达式(假设它是有效的)并给你值。

答案 4 :(得分:1)

Visual Studio 2013现在可以在Autos窗口中显示函数返回的最后一个值,从而减少在Output窗口中重新执行它或引入临时变量的需要:

http://blogs.msdn.com/b/visualstudioalm/archive/2013/06/27/seeing-function-return-values-in-the-debugger-in-visual-studio-2013.aspx

答案 5 :(得分:0)

您始终可以使用手表框评估功能调用。

美孚(valueIn);

这仅在您的Proxy.Bar(valueIn)与时间无关时才有效。

答案 6 :(得分:0)

解决方法是使用Pascal样式的结果变量:

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

对于更长的功能,我认为这是一种很好的风格。对于像上面这样的非常短的它可能被认为是矫枉过正,但它确实解决了调试器问题。

答案 7 :(得分:0)

类似问题的答案: 在VS 2013中,您可以将变量$ ReturnValue添加到手表中。它包含函数的实际返回值。

归功于Jesper Jensen。