如何除錯崩潰dump檔案

2021-06-02 08:51:48 字數 1435 閱讀 7503

其實除錯dump檔案很簡單,雙擊自動開啟vc然後f7執行。

但是中間要注意很多事情。

1。dump檔案放在**

dump檔案不用非要放在你編譯出來的位置,你完全可以建立乙個新的資料夾來放它。

2。要恢復當時的現場

可能你要問,怎麼可能,這個dump檔案可是使用者發給我的,我不可能去使用者家裡除錯吧?

這個恢復現場可不是指的非要到那台機器上去,而是要把產生dump檔案對應的二進位制檔案拿到。

但是恢復現場需要所有的二進位制檔案都要對應,你一定要有導致使用者崩潰的那些exe和dll。既然是你發布的程式,exe檔案當然你會有。所以這裡只考慮dll就行了。

dump檔案中記錄了所有dll檔案的版本號和時間戳,所以你一定可以同過某種途徑拿到它。如果你能從使用者那裡拿到最好,如果不方便,使用者不可能用的是我們平常不常用的作業系統,所以找個有對應系統的機器一般都會有。但是記住不光是檔名稱要一致,還要核對版本和時間戳,如果不同一樣沒有辦法用。

如果客戶用了某個特殊的補丁怎麼辦?

其實這個問題也很好解決,只要它不阻礙閱讀堆疊,就不用管它,除錯dump和執行程式不一樣,缺少一兩個dll沒有任何問題。

如果真的需要怎麼辦?

那就看下面一節。

3。符號檔案

符號檔案現在主要是指pdb檔案。

如果沒有符號檔案,那麼除錯的時候可能導致堆疊錯誤。

如果你丟失了這個發布裡邊你編譯出來的那些exe和dll的pdb,那麼這個損失是嚴重的,你重新編譯出來的版本是不能使用的,乖乖的看反彙編自己猜位置吧。不過也有特殊的方法可以彌補,這裡不討論。所以一定要在發布的時候把你自己的所有pdb檔案都備份起來。

我自己的dll都有了,可是缺的是系統的dll的對應pdb檔案怎麼辦?

好辦,微軟在它的符號資料庫上為我們提供了所有的pdb檔案,還有部分非關鍵dll。

如果你用的是2005之前的vs,可以參照除錯與symbol中的介紹使用。

你可以把這個cache放在你的區域網伺服器上,所有人都使用這個cache,一來加快了所有人除錯的速度,還節省了網路資源,二來這樣時間長了,你自己還會欣喜自己也有了個符號庫呢。

這個選項是只要你用除錯模式啟動程式就有效的,如果你嫌每次都去微軟找symbol很慢,而且cache裡邊已經包含了你除錯程式時用到的所有能從微軟榨取的pdb,那麼你平常只要把前面的對號去掉就行了。

4。我拿到需要的檔案了,這些檔案應該放在**?

符號資料庫中的檔案不用動,把其它的exe和dll、pdb檔案放在dump檔案的目錄裡邊就行了。

5。我用的是vs2005,明明有源**,為什麼顯示不了?

這個是dump除錯的最頭痛問題,**可能已經改過了,即使你從svn拿到當時的版本,時間戳也是錯的,vs2005就是不讓你顯示**。而只要你在options的debugging的general裡邊的require source files to exactly match the original version前面的對好去掉就行了。

DUMP檔案除錯

一 vc6.0下 1 首先要生成 pdb和 map檔案,需要做以下設定 勾選紅色的地方 按上面截圖的設定好後編譯即可。二 dmp檔案生成 1 dmp 檔案的生成,這個需要依賴一些 來生成這個檔案,這裡就不貼 了。程式測試下這個函式。上面 讓他人為崩潰,執行完後崩潰,會生成dmp檔案。三 windbg...

C 生成dump檔案,除錯dump檔案

dump 檔案是程序的記憶體映象 可以把程式的執行狀態通過偵錯程式儲存到dump檔案中 dump 檔案是用來給驅動程式編寫人員除錯驅動程式用的 這種檔案必須用專用工具軟體開啟 比如使用 windbg visualstudio開啟 當我們的程式發布出去之後 在客戶機上是無法跟蹤自己 的 bug 的 所...

C 除錯之建立Dump檔案和除錯Dump檔案

如何在發布後程式中捕獲程式的崩潰和異常往往是比較麻煩的事情,一般採用日誌記錄的方法來記錄程式執行的每個流程,但是通常為了程式執行的效能,日誌記錄的方法只是記錄程式執行的每個主要的處理流程,不能進行具體詳細的記錄,比如for 迴圈中的崩潰記錄。c 語言中呼叫window api函式createfile...