【发布时间】:2009-01-29 15:56:27
【问题描述】:
当在 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, 对象 o, 对象 t, EventArgs e) +13
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +43
System.Web.UI.Control.OnLoad(EventArgs e) +98
... ...
问题是显示的行号与我的代码中引发异常的行不对应。
在上面的示例中,堆栈显示第 5111 行,但我的 .cs 文件后面的代码只有 250 行!
aspx 页面存储在 SharePoint 网站中,并且包含代码的程序集已部署到 GAC。另外,我是在 Debug 模式下编译的。
鉴于上述设置,如何找出我的代码中的哪一行导致了异常?
strelokstrelok 指出的澄清:
在发布模式中,异常前面的数字不是代码行。相反,它是对本机编译代码的偏移,这对人类没有任何意义。更多信息在这里:http://odetocode.com/Blogs/scott/archive/2005/01/24/963.aspx
在调试模式下,PDB 文件会自动将本机代码偏移量映射到代码中的 .cs 行,显示的数字将是代码中的对应行。
【问题讨论】:
-
.. 当然,当它是一个行号时,它会这么明确地说:.....\Areas\Store\Models\CheckoutModel.cs:line 158
-
伙计,我希望有人给出如何最好地将其转换回行号的说明。为什么你会发布一个没有调试符号的内部 web 应用程序超出了我的理解,谁会对其进行逆向工程?
标签: c# asp.net sharepoint .net-2.0 gac