如何读取.Net程序中生成的堆栈跟踪或错误信息以查找异常的根本原因

时间:2010-11-26 17:42:46

标签: c# exception

这是一个非常基本的问题,可能会重复。任何人都可以告诉我.Net中任何程序生成的错误信息是多么有用。

今天我收到错误“发现了模糊的匹配”。在数据库中保存实体(使用EF4) 我无法弄清楚为什么会出现这个错误,根本原因是什么。附件也是如此。

alt text 这是完整的错误详细信息,

System.Reflection.AmbiguousMatchException was unhandled by user code
     Message=Ambiguous match found.
     Source=mscorlib
     StackTrace:
   at System.RuntimeType.GetPropertyImpl(String name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers)
   at System.Type.GetProperty(String name)
   at IAA.Data.EntityFramework.RepositoryWithTypedId`2.SaveOrUpdate[T](T entity)
   at ABC.XYZ.ApplicationServices.AcknowledgementManagementService.SaveOrUpdate(AcknowledgementFormViewModel acknowledgementFormViewModel) in E:\RA\ABC.XYZ\app\ABC.XYZ.ApplicationServices\AcknowledgementManagementService.cs:line 123
   at ABC.XYZ.Web.Controllers.AcknowledgementsController.Acknowledgements(AcknowledgementFormViewModel acknowledgementFormViewModel) in E:\RA\ABC.XYZ\app\ABC.XYZ.Web.Controllers\AcknowledgementsController.cs:line 68
   at lambda_method(Closure , ControllerBase , Object[] )
   at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
   at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)

InnerException:

3 个答案:

答案 0 :(得分:3)

这意味着抛出了System.Reflection.AmbiguousMatchException,但未被处理。它是从System.RuntimeType.GetPropertyImpl(String name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers)抛出的,它是从System.Type.GetProperty(String name)调用的,它是从IAA.Data.EntityFramework.RepositoryWithTypedId调用的。2.SaveOrUpdate [T](T entity)`,

答案 1 :(得分:2)

Hmya,没有这样的运气。如果Type.GetProperty()方法实际上会说哪个名称不明确,那将是非常好的。但它没有,你不能轻易找到。代码存在于.NET框架中并且已经过优化,调试器无法检索 name 参数的值。您唯一的提示是您的实体模型具有两个具有相同名称的属性。无论如何都是这样的。

答案 2 :(得分:1)

调试.NET Framework可以让您进入调用堆栈到发生异常的位置,您可以在其中查看局部变量。

在Visual Studio 2010中,这与在“调试器”部分中设置“选项”一样简单。在Visual Studio 2008中,有说明here