2017-10-11 120 views
1

我正在使用Microsoft Minidump功能,因此我可以分析已發佈程序中的崩潰。Microsoft小型轉儲文件沒有提供很多信息

https://msdn.microsoft.com/en-us/library/windows/desktop/ee416349(v=vs.85).aspx

的代碼相似回答這個計算器的問題:

How to write a sample code that will crash and produce dump file?

通常當我有一個碰撞,我可以在Visual Studio中打開崩潰轉儲文件,它會帶我到那些使得排除這些問題非常容易的源代碼行。

但有時並不那麼容易。

我有一個崩潰轉儲文件,我無法找到有問題的源代碼行。這是爲什麼?我可以從這個轉儲文件中獲得哪些有用的信息?任何提示在乾草堆找到針?

這是我在做什麼。

我使用標記簽出此版本的源代碼。

我複製了相應的pdb文件到同一文件夾的崩潰轉儲 - 文件是myprogram.exe.3140.dmp

我再打開與用於構建該exe編譯器的崩潰轉儲時,Visual Studio 2012年

然後我看到一些有用的信息:

最後寫入時間2017年10月10日十五時28分52秒 流程架構:86 異常代碼0000005 異常信息胎面試圖讀取或寫入到它的虛擬地址沒有適當的訪問權限。 堆信息目前

OS版本6.1.7601

模塊: myprogram.exe 1.7.41.0 myprogram.dll 1.1.0.27 等

然後我點擊調試與只有

原住民然後我得到對話框:

myprogram.exe.3140.dmp中0x548BFFD5未處理的異常:0xC0000005:執行訪問衝突位置0x548BFFD5。

在加載模塊中未找到當前堆棧幀。無法顯示此位置的來源。

我點擊斷開按鈕

然後它說幀不在模塊中。在加載的模塊中找不到當前堆棧幀。無法顯示此位置的來源。

我再點擊查看拆解超鏈接,請參見:

548BFFD5? ??

什麼是問號? ?? ??。這是否表示懸掛指針問題?還有別的嗎?

+0

我不完全感到驚訝,你沒有得到任何信息:'訪問衝突執行位置0x548BFFD5' < - 聽起來像你試圖執行代碼實際上不是代碼。可能你破壞了返回地址(通過某種形式的UB)並最終嘗試執行一段隨機存儲器。 – Borgleader

回答

0

問號意味着地址0x548BFFD5(您的應用程序試圖執行的)中的數據不會反彙編爲任何有意義的內容。

正如你所看到的,你可能有一個懸掛的指針或試圖執行一個不再存在的對象所指向的函數。或者你試圖執行一個指向任何東西的函數指針。

如果您使用符號進行編譯,則可能可以返回調用堆棧/堆棧跟蹤並查看問題的起始位置。