2009-07-07 72 views
0

偶爾(ahem ...)我的代碼在某個系統上崩潰;我的用戶經常發送Windows崩潰對話框的屏幕截圖。比如,最近我收到這樣的:Windows崩潰對話框中十六進制數的含義

 
Unhandled win32 exception @ 0x3a009598 in launcher2g.exe: 
0xC00000005: Access violation writing location 0x00000000. 

很明顯,我(因0000005代碼還有寫出錯誤消息),我在我的launcher2g.exe過程某處以下空指針。 「0x3a009598」數字的意義並不明確。這是代碼在存儲彙編程序指令的進程地址空間中發生了哪些錯誤?

假設0x3a000000是將launcher2g.exe模塊加載到進程中的位置,我使用Visual Studio調試器檢查0x3a009598處的彙編代碼,但不幸的是這只是很多'int 3'指令(這是一個調試版本,所以有很多int 3填充)。

我總是想知道如何充分利用這些@ 0x12345678數字 - 如果這裏有人能夠闡明它,或者分享一些指向進一步解釋的指針,那將是非常棒的。

UPDATE:在任何情況下,在未來發現了這個問題,這裏有一個非常有趣的閱讀,我發現這解釋瞭如何使錯誤消息作爲一個我上面引述的意義:Finding crash information using the MAP file

回答

2

0x3a009598將是導致崩潰的x86指令的地址。

EXE通常會在首選加載地址加載 - 通常是0x04000000 iirc。所以它的血腥可能遠離0x3a009598。該進程加載的某個DLL可能位於此地址。

如果您可以讓用戶生成併發送它們,則崩潰轉儲通常是調試此類事物最有用的方法。您可以使用Visual Studio 2005加載它們並獲取系統dll的自動符號解析。

接下來,構建過程生成的.map文件應該可以幫助您確定違規函數 - 假設您設法確定哪個exe/dll模塊崩潰,以及它的實際加載地址是什麼。

在XP上,用戶可以使用DrWatsn32來生成並向您發送崩潰轉儲。在Vista及更高版本中,Windows錯誤報告將崩潰轉儲寫入c:\ users \\ AppData \ Local \ Temp * .mdmp

+0

是的,這個地址有一個DLL,我知道哪一個我開發的應用程序鏈接的DLL)。一個關於Vista崩潰轉儲的評論:我需要以某種方式啓用它們嗎?我遇到了一些崩潰,但%TEMP%中沒有看到mdmp文件。感謝指向.map文件的指針,但我會研究它! – 2009-07-08 08:02:00