我正在嘗試調試客戶端向我們報告的錯誤。堆棧跟蹤只有字節偏移量,而不是行數。在.NET程序集中查找字節偏移量
例如
[NullReferenceException異常:對象引用不設置爲一個對象的一個實例]
Foo.Bar(FooFoo P)32
Foo.BarBar()191
Foo.BarBarBar()15
如何反向工程這些字節偏移到代碼/方法調用等行?
我如何才能找到其中的NullReferenceException被拋出?
我正在嘗試調試客戶端向我們報告的錯誤。堆棧跟蹤只有字節偏移量,而不是行數。在.NET程序集中查找字節偏移量
例如
[NullReferenceException異常:對象引用不設置爲一個對象的一個實例]
Foo.Bar(FooFoo P)32
Foo.BarBar()191
Foo.BarBarBar()15
如何反向工程這些字節偏移到代碼/方法調用等行?
我如何才能找到其中的NullReferenceException被拋出?
這是可能的工作(或者可以不:))的解決方案。的問題是,偏移量和行號之間的映射被包含在PDB(又名調試符號)
ildasm
,要麼將它添加到PATH
或其他地方複製。ildasm /LINENUM /SOURCE YourFile.exe
。它將輸出具有偏移和源線映射的IL。唯一的問題,我看到你不能生產剛好相同的二進制文件和映射可能會波動。
我記得把我的頭頂部的唯一工具將是.NET Reflector。打開與您客戶端的二進制文件完全相同的二進制文件,並將「選項」對話框中的語言更改爲IL,並且它應該顯示(AFAIK)與每行上的標籤相同的字節偏移量。
你必須閱讀IL,而不是C#或任何東西,雖然,但它總比沒有好。
編輯:Andreys的解決方案是在未來可運送壽:)
可能會更好應用程序調試符號,這將產生線,而不是在堆棧跟蹤偏移 – Andrey 2011-02-03 12:36:33
如果您啓用優化編譯不太容易 – 2011-02-03 12:39:59
+1,沒有理由調試symbolos不編譯即使不運行生活,這你可以將它們發送到客戶端 – TomTom 2011-02-03 12:40:24