C# 异常错误消息,行号不正确
在Asp.Net网页中引发异常时,将显示一条错误消息,其中包含完整的堆栈跟踪 示例如下: 堆栈跟踪:C# 异常错误消息,行号不正确,c#,asp.net,sharepoint,.net-2.0,gac,C#,Asp.net,Sharepoint,.net 2.0,Gac,在Asp.Net网页中引发异常时,将显示一条错误消息,其中包含完整的堆栈跟踪 示例如下: 堆栈跟踪: IndexOutOfRangeException:索引超出了数组的边界 MyNameSpace.SPAPP.ViewDetailsCodeBind.LoadView()+5112 MyNameSpace.SPAPP.ViewDetailsCodeBind.Page_加载(对象发送方,事件参数)+67 System.Web.Util.CalliHelper.EventArgFunctionCall
IndexOutOfRangeException:索引超出了数组的边界
MyNameSpace.SPAPP.ViewDetailsCodeBind.LoadView()+5112 MyNameSpace.SPAPP.ViewDetailsCodeBind.Page_加载(对象发送方,事件参数)+67
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp、对象o、对象t、事件参数e)+13
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(对象发送者,事件参数)+43
System.Web.UI.Control.OnLoad(EventArgs e)+98
... ... 问题是显示的行号与引发异常的代码中的行号不一致。
在上面的示例中,堆栈显示行号5111,但我的codebhind.cs文件只有250行 aspx页面存储在SharePoint网站中,带有代码隐藏的程序集已部署到GAC。此外,我还以调试模式编译。
鉴于上述设置,如何找出代码中的哪一行导致了异常?
澄清如下: 在释放模式下异常前面的数字不是代码行。相反,它是对本机编译代码的偏移,对人类没有任何意义。更多信息请点击此处: 在调试模式下,PDB文件将自动将本机代码偏移量映射到代码中的.cs行,显示的数字将是代码中的相应行
您的代码隐藏文件不是完整的类,它只是ASP.NET编译整个类时使用的一部分。要找到这一行的真正内容,请使用Reflector之类的工具查看已编译的类/程序集。可能运行的代码与您在屏幕上看到的不同。某些伙伴可能已经为您重构了它。:) 这些数字不是行号。在释放模式下,堆栈跟踪将偏移量包含到本机编译代码中,而不是行号中。您可以在此处阅读更多关于它的信息:
获取堆栈跟踪中的行号的唯一方法是使用可用的PDB文件在调试模式下编译代码。我可能在这里错了,但是,在ASP.Net中,堆栈始终为您提供正确的行号,但是在ASP.Net+SharePoint中,情况似乎并非如此。无论如何,我使用了RedGate.NETReflector,但是我找不到任何可以帮助我识别导致异常的代码行的东西。这是不正确的。这些数字不是行号,甚至不偏移到IL。。。当然,当它是一个行号时,它会明确表示:…..\Areas\Store\Models\CheckoutModel.cs:line 158如果您在团队环境+1中,请记住从源代码管理获取最新代码