一、vc6.0下
1、首先要生成
pdb和
map檔案,需要做以下設定:
勾選紅色的地方
按上面截圖的設定好後編譯即可。
二、dmp檔案生成
1、dmp
檔案的生成,這個需要依賴一些**來生成這個檔案,這裡就不貼**了。
程式測試下這個函式。
上面**讓他人為崩潰,執行完後崩潰,會生成dmp檔案。
三、windbg的配置和使用
1、先配置
symbol
(file \ symbol file path)
開啟後填入c:\symbols;srv*c:\symbols*
比如:c:\symbols;d:\nomi\worktest\testdumpforvc\debug
;;注意上面的「c:\symbols;
」,因為我在最上面已經把
symbolsc盤的
symbols
了,所以可以把後面的
去掉,後邊的
;d:\nomi\worktest\testdumpforvc\debug
路徑是pdb
檔案路徑
注意路徑不用包含pdb、
exe的名字 比如到
d:\\***\debug就行
2、配置原始碼路徑( file \ source file path )
把**路徑貼進去就行了。比如「d:\worktest\testdumpforvc」
3、設定
exe路徑
( file \ image file path )
填入執行程式路徑,只要到目錄層就行,例如「d:\worktest\testdumpforvc\release」
4.開啟
dmp檔案
可以直接拖dmp進去,也可用下面的方式開啟
5.開啟後檢測一些資訊,然後輸以下命令進行檢視
l 開啟dmp檔案後會看到一些設定資訊
l 輸入命令!analyze -v
看到以下資訊
再來對比下**裡的出問題的地方。
6.高版本的
dmp檔案設定
就拿2013來說
選擇生成對映檔案。
三、高版本的dmp檔案除錯。
1、高版本的可以用上面的方法進行
windbg
除錯,也可以自身的編譯器進行除錯。
自身的編譯器除錯,dmp檔案直接拖進去,然後,選擇除錯,如下圖,他會定位出崩潰位置
四、map檔案檢視 1、
map檔案裡儲存的是各個函式的偏移位址。
當程式崩潰時,彈出的框裡面會帶有函式位址(winserver會彈出,
win7
好像不會有那種介面彈出),根據這個偏移位址就能找到相應的函式。
2、根據
dmp檔案提示出錯的位址。去
map裡面找也能找著。比如
這裡提示出錯的位址是004014cb
開啟map檔案檢視
根據上面出錯的位址004014cb 找到位址範圍,在下圖中是
004014b0到
004014e0
中間。
從這就可以看出,是testcrash到createdumpfile中間出錯了。
再看下圖的函式,找到問題所在。
C 生成dump檔案,除錯dump檔案
dump 檔案是程序的記憶體映象 可以把程式的執行狀態通過偵錯程式儲存到dump檔案中 dump 檔案是用來給驅動程式編寫人員除錯驅動程式用的 這種檔案必須用專用工具軟體開啟 比如使用 windbg visualstudio開啟 當我們的程式發布出去之後 在客戶機上是無法跟蹤自己 的 bug 的 所...
C 除錯之建立Dump檔案和除錯Dump檔案
如何在發布後程式中捕獲程式的崩潰和異常往往是比較麻煩的事情,一般採用日誌記錄的方法來記錄程式執行的每個流程,但是通常為了程式執行的效能,日誌記錄的方法只是記錄程式執行的每個主要的處理流程,不能進行具體詳細的記錄,比如for 迴圈中的崩潰記錄。c 語言中呼叫window api函式createfile...
dump檔案 dump除錯案例1 未知跳轉
背景 自己手裡有乙個用duilib開發的工具在某乙個使用者那邊高頻崩潰。只要一啟動就崩潰,一天崩潰幾十次,很奇怪。從使用者那邊抓取dump檔案回來,調出windbg進行除錯查詢原因。過程 1.準備好pdb及原始碼檔案,windbg載入dump起來。命令列輸入.ecxr,然後切換看堆疊如下 報錯的 在...