11

我查看了 SO 但找不到答案,但我确定它在那里......?

在调试时,如果我在其上放置断点,如何获取 return 语句的值?我喜欢浓缩成一行,这样它看起来“漂亮”。但我目前不知道,因为我不知道如何调试返回的结果......?

using (IUnitOfWork context = new EFUnitOfWork())
{
    var repo = new ReportRepository(context);
    return repo.GetProcedureReport(startDate, endDate).ToList();
    //return result.ToList();
}
4

3 回答 3

17

在 VS 2013 中,您可以将变量 $ReturnValue 添加到手表中。它包含函数的实际返回值。

于 2014-07-23T06:25:14.590 回答
6

选择方法并单击鼠标右键。从菜单中选择快速观看。

在此处输入图像描述

我假设您不能在其中设置断点GetProcedureReport

于 2013-03-04T22:24:40.823 回答
4

您尝试的返回值调试类型对于 C# 等托管语言是不可能的。C++ 调试器通过自动窗口提供此信息,但不提供托管语言。

主要原因是 CLR 调试引擎根本不提供此值。为了让 C#、VB 或 F# 提供此功能,他们需要重写每个 return 语句以将值溢出到临时值中,然后返回临时值。然后可以通过在调试器中显示此临时值来实现返回值调试。

var returnTemp = repo.GetProcedureReport(startDate, endDate).ToList();
return returnTemp;

这会起作用,但会给代码带来负面影响。最值得注意的是,大型结构值最终会被复制两次并对性能产生负面影响。此外,这种重写需要在编译时进行,并且会影响正在编译的每个方法。如果可以在调试时按需完成,则影响会小得多。负面因素在这里权衡了好处。

请注意,VB.Net 确实在一定程度上提供了返回值调试。我在博客上写过它是如何工作的

http://blogs.msdn.com/b/jaredpar/archive/2011/01/12/why-the-debugging-difference-between-c-and-vb-net-return-values.aspx

于 2013-03-04T23:23:16.990 回答