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

2021-08-15 21:30:17 字數 1860 閱讀 9031

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,然後切換看堆疊如下 報錯的 在...