(原创)在MFC对话框程序添加崩溃记录

2013/05/02 MFC

MFC程序,一旦崩溃,没有任何记录的话,将无法定位问题,因此有必要加入一些控制,来输出错误信息。

  1. 加入头文件以及库
  #include <DbgHelp.h>  
  #pragma comment(lib, "dbghelp.lib") 
  1. 定义错误处理函数
	LONG __stdcall ExceptCallBack(EXCEPTION_POINTERS *pExcPointer)
	{
		MessageBox(NULL, _T("不知道为什么,程序崩溃了,请把同路径下的crash.dmp文件发给开发者!"), NULL, MB_OK);

		//创建dump文件  
		TCHAR path[MAX_PATH];
		GetCurrentDirectory(MAX_PATH, path);
		CString p;
		p.Format(_T("%s/crash.dmp"),path);
		HANDLE hFile = CreateFile(p, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
	
		//向文件写下当前程序崩溃相关信息  
		MINIDUMP_EXCEPTION_INFORMATION loExceptionInfo;
		loExceptionInfo.ExceptionPointers = pExcPointer;
		loExceptionInfo.ThreadId = GetCurrentThreadId();
		loExceptionInfo.ClientPointers = TRUE;
		MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpNormal, &loExceptionInfo, NULL, NULL);
		CloseHandle(hFile);
	
		return EXCEPTION_EXECUTE_HANDLER;
	}
  1. 在程序入口添加错误回调函数
	BOOL CAutoTestApp::InitInstance(){
		
		SetUnhandledExceptionFilter(ExceptCallBack);
		.
		.
		.
		}
  1. 这样每次崩溃,在程序运行的同级目录会有一个crash.dmp文件,使用vs或windbg打开可以定位问题,当然,前提是你有同一批次编译出来的pdb文件。

知识共享许可协议
本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。

站内搜索

    撩我备注-博客

    joinee

    目录结构