当在 Asp.Net 网页中引发异常时,会显示一条错误消息以及完整的堆栈跟踪。
下面的例子:
堆栈跟踪:
IndexOutOfRangeException:索引超出了数组的范围。
MyNameSpace.SPAPP.ViewDetailsCodeBehind.LoadView() +5112 MyNameSpace.SPAPP.ViewDetailsCodeBehind.Page_Load(Object sender, EventArgs e) +67
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) + 13
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(对象发送者,EventArgs e)+43
System.Web.UI.Control.OnLoad(EventArgs e)+98
... ...
问题是显示的行号与我的代码中引发异常的行不对应。
在上面的示例中,堆栈显示行号 5111,但我在 .cs 文件后面的代码只有 250 行!
aspx 页面存储在 SharePoint 站点中,并且包含后面代码的程序集已部署到 GAC。另外,我已经在调试模式下编译。
鉴于上述设置,我怎样才能找出我的代码中的哪一行导致了异常?
strelokstrelok指出的澄清:
在发布模式下,异常前面的数字不是代码行。相反,它是对本机编译代码的偏移,这对人类没有任何意义。更多关于这里的信息:http: //odetocode.com/Blogs/scott/archive/2005/01/24/963.aspx
在调试模式下,PDB 文件将自动将本机代码偏移量映射到代码中的 .cs 行,并且显示的数字将是代码中的相应行。