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

在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

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

它实际上是可见的。 调试+其他Windows +注册表。 查看EAX的值(x64中的RAX)。 简单积分类型的值在EAX寄存器中返回。 在EDX很长:EAX。 STx中的浮点(X64中的XMM00)。


这很难实现,抖动决定了方法如何返回值,不同的抖动会做出不同的选择。 特别是当返回值类型不简单时,如结构。 如果它很大,则抖动将在调用方法上保留堆栈空间并将指针传递给该空间,以便被调用的方法可以在那里复制返回值。 尽管如此,VS2013 终于推出了它 ,目前可在预览版中使用。 在“自动”窗口中可见,并在“立即”窗口中使用$ReturnValue内部变量并观察表达式。

不幸的是,在托管代码(C#或VB)中以唯一的方式使用临时变量使代码混乱。 CLR不支持调试器中的“托管返回值”,因此VS也不支持。

在C ++中,此function稍微简单一些。 C ++只能抓取最后一个返回值的寄存器或堆栈位置。 它不必处理像JITer和垃圾收集这样的问题。 这两者都使诸如此类的特征大大复杂化。

如果您需要此function,我强烈建议您在连接时提交function请求或投票给现有function

https://connect.microsoft.com/VisualStudio

Visual Studio 2013将此function添加到C#和VB代码中。 请在预览http://www.microsoft.com/visualstudio/eng/2013-preview中查看,并告诉我们您的反馈。

你可以设置你的Main来返回一个int,如果有一个Main()的返回值帮助你,但你不会看到test()例程的返回值,正如Jared所提到的那样。 因此,如果要查看值,则必须使代码混乱。

它最终在VS 2013中实现。阅读VS博客上的长篇故事。

简而言之:踩出或超过方法调用会使用被调用方法的结果填充Autos窗口。 图像说得比文字好:

  1. 开始调试。
    在此处输入图像描述

  2. 跳过方法调用。

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

    在此处输入图像描述

下载VS 2013预览版试试自己。

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