2009-04-21 100 views
1

我發現了錯誤與在日誌中的堆棧的頂部以下的(C#ASP.NET應用)「未設置爲一個對象的一個​​實例對象引用」:如何解釋此C#堆棧跟蹤?線錯誤零

@Web.UI.UserBrochurePage.Page_Load(Object,EventArgs)+25 Line: 0 
@System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr,Object,Object,EventArgs)+0 Line: 0 
@System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object,EventArgs)+26 Line: 0 
@System.Web.UI.Control.OnLoad(EventArgs)+38 Line: 0 
@System.Web.UI.Control.LoadRecursive()+35 Line: 0 
@System.Web.UI.Page.ProcessRequestMain(Boolean,Boolean)+1160 Line: 0 

我不明白的事情:

  1. 每一個錯誤是在線路的零
  2. 最有趣的錯誤(頂部一個 - 在我的代碼)有一個「+25」之後。我從來沒有理解這些意思,儘管我認爲他們是字符偏移的行......如果是這樣的話,它不會指向任何有意義的東西(參數聲明的中間)。

這是一個處於發佈模式的生產系統,但通常我仍然可以從堆棧跟蹤對象中獲取行號。在這種情況下,不幸的是,這個錯誤並沒有在我們的調試系統上重現,所以我被困在這裏。

任何意見,將不勝感激。

感謝, 湯姆

+0

您是否嘗試過在發佈模式下創建新版本並在您的調試系統上進行測試?看看是否再次生成錯誤! – Kirtan 2009-04-21 06:32:30

回答

2

有關了解偏移信息,請參閱this question。我懷疑你應該真的只是用調試信息構建你的生產二進制文件 - 這比檢查IL來確定偏移量意味着哪一行更容易。

+1

雖然這種調試信息總是一個額外的文件,但令人煩惱。我喜歡把東西作爲單獨的exe文件工具分發。 – Nyerguds 2016-08-22 09:36:05

6

我認爲你看到「Line 0」對於堆棧跟蹤中的每個調用都是因爲你的代碼是以發佈模式而不是調試模式編譯的。在調試模式下,您的代碼將被編譯爲包含調試符號文件(.pdb)。當這個文件可用時,你的異常棧跟蹤將準確地表示行號。

在任何情況下,只有Page_Load的行號是重要的,因爲其餘部分是框架程序集的內部調用。

每個棧跟蹤條目之後的+ xx數字顯然是「byte offset into native code」。我承認它最初對我來說是以蜱或毫秒爲單位執行的時間。

+2

您也可以爲發佈版本創建PDB。 – 2009-04-21 06:45:00