// 處理Unhandled Exception的回調函數
//
// 一個有函數調用的類
//
class CrashTest
{
public:
void Test()
{
Crash();
}
private:
void Crash()
{
// 除零,人爲的使程序崩潰
//
int i = 13;
int j = 0;
int m = i / j;
}
};
// 創建Dump文件
//
void CreateDumpFile(LPCWSTR lpstrDumpFilePathName, EXCEPTION_POINTERS *pException)
{
// 創建Dump文件
//
HANDLE hDumpFile = CreateFile(lpstrDumpFilePathName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
// Dump信息
//
MINIDUMP_EXCEPTION_INFORMATION dumpInfo;
dumpInfo.ExceptionPointers = pException;
dumpInfo.ThreadId = GetCurrentThreadId();
dumpInfo.ClientPointers = TRUE;
// 寫入Dump文件內容
//
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &dumpInfo, NULL, NULL);
CloseHandle(hDumpFile);
}
LONG ApplicationCrashHandler(EXCEPTION_POINTERS *pException)
{
// 這裏彈出一個錯誤對話框並退出程序
//
CreateDumpFile(_T("C:\\Test.dmp"), pException);
FatalAppExit(-1, _T("*** Unhandled Exception! ***"));
return EXCEPTION_EXECUTE_HANDLER;
}
int main(int argc, _TCHAR* argv[])
{
short int b;
int a = sizeof(b);
SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)ApplicationCrashHandler);
CrashTest test;
test.Test();
return 0;
}