VS在C#代码中获得返回值?

时间:2009-02-26 15:45:29

标签: c# visual-studio debugging

在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

除了使用临时变量使代码混乱之外,有关如何获取返回值的任何建议吗?

5 个答案:

答案 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和垃圾收集这样的问题。这两者都使诸如此类的特征大大复杂化。

如果你想要这个功能,我强烈鼓励你在连接上提交功能请求或投票给现有的

https://connect.microsoft.com/VisualStudio

答案 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)。图像说得比文字好:

  1. 开始调试。
    enter image description here

  2. 跳过方法调用。

  3. 利润!请注意,将显示 all 嵌套方法调用的返回值。太好了!

    enter image description here

  4. Download VS 2013 Preview为自己尝试。

    奖金!还实现了64位代码编辑和继续!