行号不正确的异常错误消息
Posted
技术标签:
【中文标题】行号不正确的异常错误消息【英文标题】:Exception error message with incorrect line number 【发布时间】: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 应用程序超出了我的理解,谁会对其进行逆向工程? 【参考方案1】:这些数字不是行号。在发布模式下,堆栈跟踪包含本地编译代码的偏移量,而不是行号。你可以在这里阅读更多关于它的信息: http://odetocode.com/Blogs/scott/archive/2005/01/24/963.aspx
在堆栈跟踪中获取行号的唯一方法是在调试模式下使用可用的 PDB 文件构建代码。
【讨论】:
【参考方案2】:您的代码隐藏文件不是完整的类,它只是整个类由 ASP.NET 编译时使用的一部分。要找到该行的真正内容,请使用 Reflector 之类的工具查看已编译的类/程序集。
【讨论】:
我在这里可能错了,但是 AFAIK,在 ASP.Net 中,堆栈总是为您提供正确的行,但是,在 Asp.Net + SharePoint 中,情况似乎并非如此。无论如何,我使用 red-gate .Net 反射器,但我找不到任何可以帮助我识别导致异常的代码行的东西。 这是不正确的。这些数字不是行号,甚至不是 IL 的偏移量。【参考方案3】:也许正在运行的代码不是您在屏幕上看到的。有些伙伴可能已经为你重构了它。 :)
【讨论】:
如果您在团队环境中,请记得从源代码管理中获取最新代码 +1以上是关于行号不正确的异常错误消息的主要内容,如果未能解决你的问题,请参考以下文章