2009-01-29 79 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

也許運行的代碼不是你在屏幕上看到的。有些伴侶可能會爲你重構它。 :)

相關問題