2010-05-13 101 views
6

爲什麼堆棧跟蹤顯示「行0」,,但僅適用於堆棧跟蹤中的一幀不正確行號的堆棧跟蹤

例如。

... 
at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) 
at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader() 
at My.LibraryA.Some.Method():line 16 
at My.LibraryB.Some.OtherMethod():line 0 
at My.LibraryB.Some.Method():line 22 
at My.LibraryA.Some.Method():line 10 

背景:

我有一個與異常失敗,並記錄堆棧跟蹤到其日誌文件的應用程序。構建應用程序時,所有程序集都編譯有完整的調試信息(項目屬性 - >生成 - >高級 - >調試信息 - >完整),因此生成了PDB文件。爲了幫助我診斷錯誤來自哪裏,我將PDB文件放入應用程序的bin目錄中,並重現該異常。每個堆棧幀的所有行號看起來都是正確的,除了顯示「行0」作爲其來源的例外。

+0

是否優化打開後編譯? (請記住,優化開/關和調試信息的開/關是正交開關。)如果是這樣,那麼抖動可能會選擇進行內聯或其他優化,這可能會使得很難確定原始代碼的位置。 – 2010-05-13 15:27:25

+0

@Eric:是的。有什麼方法可以獲得實際的線路號碼嗎? – adrianbanks 2010-05-13 15:38:02

+1

當然。在關閉優化的情況下編譯它。 – 2010-05-13 17:04:11

回答

3

這確實落在了Eric建議的內聯方法上。

我設法在本地重現原始錯誤,但僅在發佈版本中進行編譯時。就像我有PDB一樣,我可以通過代碼來找到問題。