在程序崩潰明產生DUMP

// 處理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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章