在Visual Studio 2008中使用C#并在调试器中单步执行一个函数,我到达函数的末尾,并且在最后的大括号上并且即将返回。有没有办法找出函数即将返回的值?
如果计算返回值,则必须执行此操作,例如:
return (x.Func() > y.Func());
答案 0 :(得分:4)
它有点低级别,但是如果你切换到反汇编,那么你可以单步执行指令并查看返回值的设置。它通常设置在@eax寄存器中。
如果你不想单步执行它,你可以在ret指令上放置一个断点并检查该点的寄存器。
答案 1 :(得分:3)
我为Visual Studio制作了名为BugAid的商业扩展程序(目前处于测试阶段),完全符合您的要求。
在您的示例中,它会向您显示:
它的工作方式是在调试代码时检测代码,允许我们检索两次调用“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);