在VS中调试C / C ++(非托管?)代码时,在退出函数后,您可以在“autos”窗口中看到返回的值:
alt text http://img156.imageshack.us/img156/6082/cpp.jpg
但是,这对C#代码不起作用:
alt text http://img120.imageshack.us/img120/9350/38617355.jpg
除了使用临时变量使代码混乱之外,有关如何获取返回值的任何建议吗?
答案 0 :(得分:7)
实际上是可见的。调试+其他Windows +注册表。查看EAX的值(x64中的RAX)。简单积分类型的值在EAX寄存器中返回。在EDX很长:EAX。 STx中的浮点(x64中的XMM00)。
这很难实现,抖动决定了方法如何返回值,不同的抖动会做出不同的选择。特别是当返回值类型不简单时,如结构。如果它很大,那么抖动将在调用方法上保留堆栈空间并将指针传递给该空间,以便被调用的方法可以在那里复制返回值。尽管如此,VS2013 finally made it available,目前在预览中可用。在“自动”窗口中可见,并在“立即”窗口中使用$ReturnValue
内在变量并观察表达式。
答案 1 :(得分:6)
不幸的是,在托管代码(C#或VB)中以唯一的方式使用临时变量使代码混乱。 CLR不支持调试器中的“托管返回值”,因此VS也不支持。
在C ++中,此功能稍微简单一些。 C ++只能获取最后一个返回值的寄存器或堆栈位置。它不必处理像JITer和垃圾收集这样的问题。这两者都使诸如此类的特征大大复杂化。
如果你想要这个功能,我强烈鼓励你在连接上提交功能请求或投票给现有的
答案 2 :(得分:1)
Visual Studio 2013将此功能添加到C#和VB代码中。请在预览http://www.microsoft.com/visualstudio/eng/2013-preview中查看,并告诉我们您的反馈意见。
答案 3 :(得分:0)
你可以设置你的Main来返回一个int,如果Main()的返回值对你有帮助,但你不会看到test()例程的返回值,正如Jared所提到的那样。因此,如果要查看值,则必须使代码混乱。
答案 4 :(得分:0)
它最终在VS 2013中实现。阅读长篇故事on the VS blog。
简而言之:将从或中踩到方法调用会使用被调用方法的结果填充 Autos 窗口( S)。图像说得比文字好:
开始调试。
跳过方法调用。
利润!请注意,将显示 all 嵌套方法调用的返回值。太好了!
Download VS 2013 Preview为自己尝试。
奖金!还实现了64位代码编辑和继续!