在VS调试器中获取方法的返回值
是否可以在Visual Studio调试器中获取方法的返回值,即使该值未分配给局部变量? 例如,我正在调试以下代码:
public string Foo(int valueIn) { if (valueIn > 100) return Proxy.Bar(valueIn); else return "Not enough"; }
因为我没有在Foo中设置任何局部变量,并且假设我没有在任何调用Foo中设置断点,有没有办法看到返回值是什么,如果我在Foo内部有一个断点(或另一种方式) )? 我对Autos或Intermediate窗口没有多少经验,所以我不确定这些是否是有效选项。
您可以在Foo中设置断点,打开即时窗口并运行以下命令:
? Foo(valueIn)
这将在立即窗口中打印返回值。
您也可以复制表达式并将其粘贴到Watch窗口中,但只有在我确定该调用没有副作用时才会这样做(否则您会得到令人困惑的结果)。
您始终可以切换到反汇编视图并逐步执行各个指令。 在执行’ret’指令之前,返回值将在@eax(或@rax)中。
不,我不知道有办法做到这一点。 我会在调用者中放置一个断点并查看返回值。
您还可以在调试器中突出显示任何表达式,然后右键单击 – >快速监视。 这将执行表达式(假设它是有效的)并给你值。
Visual Studio 2013现在可以在“自动”窗口中显示函数返回的最后一个值,从而减少在“输出”窗口中重新执行它或引入临时变量的需要:
您始终可以使用您的手表盒来评估function调用。
FOO(valueIn);
这仅在您的Proxy.Bar(valueIn)与时间无关时才有效。
解决方法是使用Pascal样式的结果变量:
public string Foo(int valueIn) { string result; if (valueIn > 100) result = Proxy.Bar(valueIn); else result = "Not enough"; return result; }
对于更长的function,我认为这是一种很好的风格。 对于像上面这样的非常短的它可能被认为是矫枉过正,但它确实解决了调试器问题。
类似问题的答案:在VS 2013中,您可以将变量$ ReturnValue添加到手表中。 它包含函数的实际返回值。
感谢Jesper Jensen。