我看了看但却找不到答案,我确定它在那里但是......?
在调试时,如果我在其上放置断点,如何获取return语句的值?我喜欢凝聚成一条线,只是看起来很漂亮。但我目前没有,因为我无法弄清楚如何调试返回的结果......?
using (IUnitOfWork context = new EFUnitOfWork())
{
var repo = new ReportRepository(context);
return repo.GetProcedureReport(startDate, endDate).ToList();
//return result.ToList();
}
答案 0 :(得分:14)
在VS 2013中,您可以将变量$ ReturnValue添加到手表中。它包含函数的实际返回值。
答案 1 :(得分:4)
选择方法并右键单击。从菜单中选择Quickwatch。
我假设你不能在GetProcedureReport
内设置断点?
答案 2 :(得分:4)
使用C#等托管语言无法实现您尝试的返回值调试类型。 C ++调试器通过autos窗口提供此信息,但不提供托管语言。
主要原因是CLR调试引擎根本不提供此值。对于C#,VB或F#来提供这个,他们需要重写每个return语句以将值溢出到临时值然后返回临时值。然后可以通过在调试器中显示临时值来实现返回值调试。
var returnTemp = repo.GetProcedureReport(startDate, endDate).ToList();
return returnTemp;
这可行,但它会给代码带来负面影响。最值得注意的是,大结构值最终会被复制两次并对性能产生负面影响。此外,这种重写需要在编译时进行,并且会影响正在编译的每个方法。如果可以在调试时按需完成,那么影响会小得多。这些消极因素只是权衡了这里的好处。
请注意,VB.Net确实在很小程度上提供了返回值调试。我在博客上写了这是如何运作的