• 用CreateMiniDump手工生成dump文件


    void CreateMiniDump(struct _EXCEPTION_POINTERS* ExceptionInfo)
    {
     HMODULE hModule = ::LoadLibrary(".\\dbghelp.dll");
     if( NULL == hModule )
      return;
     MiniDumpWriteDump_PTR pfnMiniDumpWriteDump = (MiniDumpWriteDump_PTR)GetProcAddress(hModule, "MiniDumpWriteDump");
     if( NULL == pfnMiniDumpWriteDump )
     {
      FreeLibrary(hModule);
      return;
     }
     char szFile[MAX_PATH+1] = {0};
     _snprintf(szFile, MAX_PATH, ".\\cc_%u.dmp", time(NULL));
     HANDLE hFile = CreateFile(szFile, GENERIC_ALL, FILE_SHARE_READ, NULL, CREATE_ALWAYS, 0, NULL);
     if( INVALID_HANDLE_VALUE == hFile )
     {
      FreeLibrary(hModule);
      return;
     }
     MINIDUMP_EXCEPTION_INFORMATION mei;
     mei.ThreadId = GetCurrentThreadId();
     mei.ClientPointers = TRUE;
     mei.ExceptionPointers = ExceptionInfo;
     
    // (*pfnMiniDumpWriteDump)(GetCurrentProcess(), GetCurrentProcessId(), hFile,
    //  MiniDumpWithFullMemory,
    //  &mei, NULL, NULL);
     MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile,
      MiniDumpWithFullMemory,
      &mei, NULL, NULL);
     CloseHandle(hFile);
     FreeLibrary(hModule);
    }
    struct _EXCEPTION_POINTERS gEx;
    DWORD FilterFunction(struct _EXCEPTION_POINTERS* ex)
    {
     memcpy(&gEx,ex,sizeof(_EXCEPTION_POINTERS));
     return 1;
    }
    void Dmp()
    {
     __try
     {
      
      // try block 
      throw 12;
      
     }
     __except ( FilterFunction(GetExceptionInformation()) )
     { 
      // exception handler block
      CreateMiniDump(&gEx);
      
     }
    }

  • 相关阅读:
    单核时代,PHP之类多线程或者多进程的,是怎么处理并发的?是排队吗?
    高并发下的Node.js与负载均衡
    telnet 查看端口是否可访问
    同步与异步--
    函数式编程沉思录(草稿)
    面向状态机编程
    promise是有状态的moand
    异步链式编程—promise沉思录
    同步与异步
    网络编程释疑之:同步,异步,阻塞,非阻塞
  • 原文地址:https://www.cnblogs.com/ahuo/p/1566174.html
Copyright © 2020-2023  润新知