行号不正确的异常错误消息

时间:2009-01-29 15:56:27

标签: c# asp.net sharepoint .net-2.0 gac

当在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(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行,显示的数字将是代码中的相应行。

3 个答案:

答案 0 :(得分:10)

这些数字不是行号。在发布模式下,堆栈跟踪包含本机编译代码的偏移量而不是行号。你可以在这里阅读更多相关信息: http://odetocode.com/Blogs/scott/archive/2005/01/24/963.aspx

在堆栈跟踪中获取行号的唯一方法是在调试模式下使用PDB文件构建代码。

答案 1 :(得分:4)

您的代码隐藏文件不是完整的类,它只是在整个类由ASP.NET编译时使用的一部分。要查找该行的真正内容,请使用Reflector等工具查看已编译的类/程序集。

答案 2 :(得分:1)

也许正在运行的代码不是您在屏幕上看到的代码。有些队友可能会为你重构一下。 :)