VC使用dump

来源:互联网 发布:网络共享用户账户限制 编辑:程序博客网 时间:2024/05/29 12:44

/********************************************************************
    函数名称  : GetExeDir
    函数描述  : 获取可执行程序exe文件所在的目录
    输入参数  : N/A
    输出参数  : N/A
    返回值    : 返回可执行程序exe文件所在的目录
    备注      : N/A
*********************************************************************/
CString GetExeDir()
{
 CString strExeDir;
 WCHAR wszPath[MAX_PATH] = {0};
 (void)GetModuleFileNameW(NULL, wszPath, _MAX_PATH);
 WCHAR *lastslash = wcsrchr(wszPath, L'\\');
 int len = (int)(lastslash - wszPath);
 WCHAR wszTemp[MAX_PATH];
 int i=0;
 for (;i<len;i++)
 {
  wszTemp[i] = wszPath[i];
 }
 wszTemp[i] = '\0';
 while (len > 0 && wszTemp[len-1] == L'\\')
 {
  len--;
 }
 strExeDir.Format(_TEXT("%s"),wszTemp);
 return strExeDir;
}

 

//xxxapp.cpp文件

#include <DbgHelp.h>
#pragma comment(lib, "Dbghelp.lib")

LONG WINAPI ProcessException(struct _EXCEPTION_POINTERS* pExceptionInfo)
{
 CString wsDumpFilePath = GetExeDir()+_T("\\DumpFile.dmp");

 HANDLE hDumpFile = CreateFileW(wsDumpFilePath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL ,NULL);
 if (hDumpFile)
 {
  MINIDUMP_EXCEPTION_INFORMATION loExceptionInfo;
  loExceptionInfo.ExceptionPointers = pExceptionInfo;
  loExceptionInfo.ThreadId = GetCurrentThreadId();
  loExceptionInfo.ClientPointers = TRUE;
  MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &loExceptionInfo, NULL, NULL);
  CloseHandle(hDumpFile);
 }

 return EXCEPTION_CONTINUE_SEARCH;
}

 

CWinApp::InitInstance();
 SetUnhandledExceptionFilter(ProcessException); // 用于自动产生程序异常跟踪定位文件(.dump)
 AfxEnableControlContainer();

 

原创粉丝点击