头文件
#include #include
线程函数
LONG _stdcall ApplicationCrashHandler(PEXCEPTION_POINTERS pException) { CreateDumpFile(_T("test.dmp"),pException); FatalAppExit(-1, _T("***Unhandled Exception!***")); return EXCEPTION_EXECUTE_HANDLER; }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void
CreateDumpFile(
LPCTSTR
lpstrDumpFilePathName, EXCEPTION_POINTERS* pException)
{
HANDLE
hDumpFile = CreateFile(lpstrDumpFilePathName,GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if
((hDumpFile != NULL) && (hDumpFile != INVALID_HANDLE_VALUE))
{
MINIDUMP_EXCEPTION_INFORMATION dumpInfo;
dumpInfo.ThreadId = GetCurrentThreadId();
dumpInfo.ExceptionPointers = pException;
dumpInfo.ClientPointers = TRUE;
::MiniDumpWriteDump(::GetCurrentProcess(), ::GetCurrentProcessId(), hDumpFile, MiniDumpNormal,
&dumpInfo, NULL, NULL);
}
CloseHandle(hDumpFile);
}
在dialog初始化中调用函数ApplicationCrashHandler(PEXCEPTION_POINTERS pException)
BOOL CCutton_DlgDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // TODO: 在此添加额外的初始化代码 SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)ApplicationCrashHandler); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE }
生成的dmp文件必须与之前的pdb文件相对应,双击dmp文件,利用vs打开