dump 檔案是程序的記憶體映象 , 可以把程式的執行狀態通過偵錯程式儲存到dump檔案中 ; dump 檔案是用來給驅動程式編寫人員除錯驅動程式用的 , 這種檔案必須用專用工具軟體開啟 , 比如使用 windbg , visualstudio開啟;
當我們的程式發布出去之後 , 在客戶機上是無法跟蹤自己**的 bug 的 , 所以 dump 檔案對於我們來說特別有用 ; 我們可以通過 .dmp 檔案把出現 bug 的情況再現 , 然後再現客戶環境 (包括堆疊呼叫等情況) , 設定原始碼除錯路徑 , 可以找到出現 bug 的語句;
c++相關**
#include "windows.h"
#include "dbghelp.h"
int generateminidump(pexception_pointers pexceptionpointers)
pfnminidumpwritedump = (minidumpwritedumpt)getprocaddress(hdbghelp, "minidumpwritedump");
if (null == pfnminidumpwritedump)
// 建立 dmp 檔案件
tchar szfilename[max_path] = ;
tchar* szversion = _t("dumpdemo_v1.0");
systemtime stlocaltime;
getlocaltime(&stlocaltime);
wsprintf(szfilename, l"%s-%04d%02d%02d-%02d%02d%02d.dmp",
szversion, stlocaltime.wyear, stlocaltime.wmonth, stlocaltime.wday,
stlocaltime.whour, stlocaltime.wminute, stlocaltime.wsecond);
handle hdumpfile = createfile(szfilename, generic_read | generic_write,
file_share_write | file_share_read, 0, create_always, 0, 0);
if (invalid_handle_value == hdumpfile)
// 寫入 dmp 檔案
minidump_exception_information expparam;
expparam.threadid = getcurrentthreadid();
expparam.exceptionpointers = pexceptionpointers;
expparam.clientpointers = false;
pfnminidumpwritedump(getcurrentprocess(), getcurrentprocessid(),
hdumpfile, minidumpwithdatasegs, (pexceptionpointers ? &expparam : null), null, null);
// 釋放檔案
closehandle(hdumpfile);
freelibrary(hdbghelp);
return exception_execute_handler;
}long winapi exceptionfilter(lpexception_pointers lpexceptioninfo)
return generateminidump(lpexceptioninfo);
}int main()
注意,不要在vs裡面點執行,可以把檔案生成後在windos裡面直接點執行就可以了 DUMP檔案除錯
一 vc6.0下 1 首先要生成 pdb和 map檔案,需要做以下設定 勾選紅色的地方 按上面截圖的設定好後編譯即可。二 dmp檔案生成 1 dmp 檔案的生成,這個需要依賴一些 來生成這個檔案,這裡就不貼 了。程式測試下這個函式。上面 讓他人為崩潰,執行完後崩潰,會生成dmp檔案。三 windbg...
C 除錯之建立Dump檔案和除錯Dump檔案
如何在發布後程式中捕獲程式的崩潰和異常往往是比較麻煩的事情,一般採用日誌記錄的方法來記錄程式執行的每個流程,但是通常為了程式執行的效能,日誌記錄的方法只是記錄程式執行的每個主要的處理流程,不能進行具體詳細的記錄,比如for 迴圈中的崩潰記錄。c 語言中呼叫window api函式createfile...
dump檔案 dump除錯案例1 未知跳轉
背景 自己手裡有乙個用duilib開發的工具在某乙個使用者那邊高頻崩潰。只要一啟動就崩潰,一天崩潰幾十次,很奇怪。從使用者那邊抓取dump檔案回來,調出windbg進行除錯查詢原因。過程 1.準備好pdb及原始碼檔案,windbg載入dump起來。命令列輸入.ecxr,然後切換看堆疊如下 報錯的 在...