生成dmp的程序
#include <dbghelp.h>
#pragma comment(lib, "dbghelp.lib")
//設(shè)置異常處理回調(diào)函數(shù)
SetUnhandledExceptionFilter(UnhandledExceptionFilter);
//異常處理代碼
//EXCEPTION_EXECUTE_HANDLER equ 1 表示我已經(jīng)處理了異常,可以優(yōu)雅地結(jié)束了
//EXCEPTION_CONTINUE_SEARCH equ 0 表示我不處理,其他人來(lái)吧,于是windows調(diào)用默認(rèn)的處理程序顯示一個(gè)錯(cuò)誤框,并結(jié)束
//EXCEPTION_CONTINUE_EXECUTION equ -1 表示錯(cuò)誤已經(jīng)被修復(fù),請(qǐng)從異常發(fā)生處繼續(xù)執(zhí)行
LONG UnhandledExceptionFilter(struct _EXCEPTION_POINTERS* ExceptionInfo)
{
CString strDumpFile;
strDumpFile.Format("%d",CTime::GetCurrentTime().GetTickCount());
strDumpFile += ".dmp ";
HANDLE hFile = CreateFile(strDumpFile, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL );
if (hFile!=INVALID_HANDLE_VALUE)
{
MINIDUMP_EXCEPTION_INFORMATION ExInfo;
ExInfo.ThreadId = ::GetCurrentThreadId();
ExInfo.ExceptionPointers = ExceptionInfo;
ExInfo.ClientPointers = NULL;
// write the dump
BOOL bOK = MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpNormal, &ExInfo, NULL, NULL );
CloseHandle(hFile);
}
theApp.PostThreadMessage(WM_QUIT,0,0);
return EXCEPTION_EXECUTE_HANDLER;
}
2、調(diào)試dump文件
1)用windbg。
2)用vc,把dmp文件和exe, pdb文件放在同一目錄下, 然后用編譯器(如vc)打開(kāi), 然后開(kāi)始調(diào)試就會(huì)中斷到剛才中斷的地方.
3、以下是網(wǎng)上搜集到的條件,尚未驗(yàn)證是否是必需的,如果不能正確的生成dmp,可嘗試以下方法
1)SetUnhandledExceptionFilter()并不能處理所有的異常,比如CRT異常需要調(diào)用_set_invalid_parameter_handler()才行
1)要設(shè)置c運(yùn)行庫(kù)異常處理函授。這樣當(dāng)出錯(cuò)后,會(huì)引發(fā)你的異常處理,你的處理中,可以直接丟掉或重新啟動(dòng)你的exe,或?qū)懭雔og文件。
2)注意生成的release應(yīng)用程序需要開(kāi)啟“生成調(diào)試信息”選項(xiàng)。
2)使用VS2008的話,不需要開(kāi)啟“生成調(diào)試信息”選項(xiàng)就可以生成的。
3)編譯release版本的時(shí)候同時(shí)生成map文件,具體可以在網(wǎng)上查找一下關(guān)于map文件的使用方法。
3)生成可執(zhí)行文件時(shí)在工程屬性設(shè)置里的“調(diào)試”選項(xiàng)里將“生成映射文件”設(shè)置為“是”。這主要是用來(lái)在出錯(cuò)時(shí)通過(guò)dump和map文件對(duì)錯(cuò)誤定位。
4、其他工具
1)生成dump文件需要Dr.Watson,它是Windows自帶的調(diào)試工具,只要對(duì)它進(jìn)行了設(shè)置,程序出錯(cuò)后就可以在相應(yīng)目錄下找到dump文件?蓞⒁(jiàn)如下資料:http://hi.baidu.com/mryongzhang/blog/item/11a774edf9b513d72e2e2167.html
2)adplus是最有用的工具,
- PC官方版
- 安卓官方手機(jī)版
- IOS官方手機(jī)版