您的位置:首页 > 其它

MFC程序自动生成dump Windbg文件

2009-12-16 14:30 537 查看
  在客户机器上如何得到应该程序的详细出错信息, 这里使用drwtsn32,在应用程序崩溃的时候自动将调用栈的信息以文件形式保存在磁盘。

  生成dump有drwtsn32, NTSD,CDB等多种工具,drwtsn32 于系统自带。

  在项目中使用以下几个步骤:

1. 创建minidmp.h  

GPTUnhandledExceptionFilter

#include "minidmp.h"

LONG WINAPI GPTUnhandledExceptionFilter(PEXCEPTION_POINTERS pExceptionInfo)
{
//得到当前时间
SYSTEMTIME st;
::GetLocalTime(&st);
//得到程序所在文件夹
TCHAR exeFullPath[256]; // MAX_PATH
GetModuleFileName(NULL,exeFullPath,256);//得到程序模块名称,全路径
CString strPath;
DWORD nLoc;
strPath.Format("%s",exeFullPath);
nLoc = strPath.ReverseFind('\\');
strPath.Delete(nLoc+1,strPath.GetLength()-nLoc);

LPSTR szFileName;
wsprintf(szFileName, TEXT("%sERLOG_%04d%02d%02d%02d%02d%02d%02d%02d.dmp"),strPath, st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds, rand()%100);
CreateMiniDump(pExceptionInfo, szFileName);
std::cerr << "未知错误:" << (*pExceptionInfo->ExceptionRecord) << std::endl;
exit(pExceptionInfo->ExceptionRecord->ExceptionCode);
return EXCEPTION_EXECUTE_HANDLER; // 程序停止运行
}

3. 在异常发生之前调用SetUnhandledExceptionFilter(GPTUnhandledExceptionFilter); 通常在Main()函数开始时调用即可。

注:必需有dbghlp.dll
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: