#include <DbgHelp.h>
#pragma comment(lib, "Dbghelp.lib")
LONG WINAPI ExpFilter(struct _EXCEPTION_POINTERS *pExpInfo)
{
CString csAppDirectory = ::GetModuleFileDirectory();
CString csDumpDirectory;
SYSTEMTIME tm;
GetLocalTime(&tm);
TCHAR pszText[512] = {0};
_stprintf(pszText, _T("\\_Err%d%02d%02d%02d%02d%02d_.dmp"), tm.wYear,
tm.wMonth, tm.wDay, tm.wHour, tm.wMinute, tm.wSecond);
csDumpDirectory = csAppDirectory + _T("\\Crash");
::CreateMultipleDirectory(csDumpDirectory);
CString csDumpFile;
csDumpFile.Format(_T("%s%s"), csDumpDirectory, pszText);
HANDLE hFile = CreateFile(csDumpFile,
GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(INVALID_HANDLE_VALUE != hFile)
{
MINIDUMP_EXCEPTION_INFORMATION einfo;
einfo.ThreadId = GetCurrentThreadId();
einfo.ExceptionPointers = pExpInfo;
einfo.ClientPointers = FALSE;
MiniDumpWriteDump(
GetCurrentProcess(),
GetCurrentProcessId(),
hFile,
MiniDumpNormal,
&einfo,
NULL,
NULL);
CloseHandle(hFile);
}
MessageBox(NULL, _T("软件即将停止工作,给您带来不便深表抱歉!\r\n\
"),
_T("崩溃了"), MB_OK|MB_ICONERROR);
return EXCEPTION_EXECUTE_HANDLER;
}
main函数中调用,或软件入口调用
::SetUnhandledExceptionFilter(ExpFilter);