2009-01-29 83 views
7

当在Asp.Net网页中引发异常时,会显示一条错误消息和完整的堆栈跟踪。下面带有错误行号的异常错误消息

实施例:

堆栈跟踪:
IndexOutOfRangeException:索引阵列的边界之外。

MyNameSpace.SPAPP.ViewDetailsCodeBehind.LoadView()5112 MyNameSpace.SPAPP.ViewDetailsCodeBehind.Page_Load(对象发件人,EventArgs的)67
错误帮助(IntPtr的FP,对象o ,物体T,EventArgs的)13
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(对象发件人,EventArgs的)43
System.Web.UI.Control.OnLoad(EventArgs的)98
.. ...

问题是行号显示yed不对应于我的代码中发生异常的行。
在上面的例子中,堆栈显示了行号5111,但是我的.cs文件后面的代码只有250行!

aspx页面存储在SharePoint网站中,并且后面的代码已被部署到GAC。另外,我已经在Debug模式下编译。

考虑到上面的设置,我怎么才能找出我的代码中的哪一行导致异常?



澄清通过strelokstrelok指出:

Release模式在异常前的数量不是代码行。相反,它是本地编译代码的一个偏移量,它对人类没有任何意义。更多关于此这里:http://odetocode.com/Blogs/scott/archive/2005/01/24/963.aspx

调试模式 PDB文件将自动映射本地代码偏移在代码中你的.cs线和显示将在代码中相应的行数。

+1

..当然,当它是一个行号,它明确地说:..... \ Areas \ Store \ Models \ CheckoutModel.cs:line 158 – 2010-12-16 00:39:03

回答

10

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

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

4

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

+0

我可能在这里错了,但在ASP.Net AFAIK堆栈总是给你但是,在Asp.Net + SharePoint中,正确的行似乎并不是这样。 无论如何,我使用red-gate .Net反射器,但找不到任何能够帮助我识别导致异常的代码行。 – 2009-02-02 09:57:31

+0

这是不正确的。这些数字不是行号,甚至不是IL的偏移量。 – Strelok 2009-02-02 11:13:18

1

也许运行的代码不是你在屏幕上看到的。有些伴侣可能会为你重构它。 :)

相关问题