在VS2008中调试时如何发现函数末尾的返回值?

时间:2008-10-02 23:14:22

标签: c# visual-studio-2008

在Visual Studio 2008中使用C#并在调试器中单步执行一个函数,我到达函数的末尾,并且在最后的大括号上并且即将返回。有没有办法找出函数即将返回的值?

如果计算返回值,则必须执行此操作,例如:

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

5 个答案:

答案 0 :(得分:4)

它有点低级别,但是如果你切换到反汇编,那么你可以单步执行指令并查看返回值的设置。它通常设置在@eax寄存器中。

如果你不想单步执行它,你可以在ret指令上放置一个断点并检查该点的寄存器。

答案 1 :(得分:3)

我为Visual Studio制作了名为BugAid的商业扩展程序(目前处于测试阶段),完全符合您的要求。

在您的示例中,它会向您显示:

Statement Visualization

它的工作方式是在调试代码时检测代码,允许我们检索两次调用“Func”的返回值,从而得出表达式x.Func() > y.Func()是否为真。 / p>

有关详细信息,请参阅我的blog post on the subject

答案 2 :(得分:2)

你可以把

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

在观察窗口中进行评估,并查看结果。除非声明是

return ValueChangesAfterEveryCall();
你应该没事的。

答案 3 :(得分:2)

我仍在使用VS 2003和C ++,所以这可能适用也可能不适用。如果使用“自动”选项卡(靠近“本地”和“监视”选项卡),它将在您返回后告诉您函数的返回值。

答案 4 :(得分:1)

我实际上建议重构代码以将单个函数返回到局部变量中。这样,在调试代码以确定特定评估时,您自己和其他人不必跳过箍。通常,这会生成更容易调试的代码,因此更容易让其他人理解和维护。

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