• vs 自动生成core dump文件


      一直以来觉着core dump这个东西很神奇,在初步学习的时候也没有个大方向,最近项目需要记录程序崩溃时的日志信息,因此在网上寻找相关的信息,此时core dump也成为了我重点关注的东西。

        说说我的辛酸历史吧,刚毕业1年的我,C++领域的东西还是知之甚少啊,记得又一次面试被问起了demp文件,我当时真是对此一无所知,然而面试过后,我 也查询了有关dump的信息,由于当时是百度的,所以也没有查到什么有用的信息,直到最近项目上的需求我又重新拾起了这个问题,而这次是用google搜 索的相关字眼,结果被我找到了几篇不错的文章,而且还附带有事例代码,短短几分钟,我就成功的在我的程序中生成了dump文件,在此记录一下,也非常感谢 帮助我的几篇博客。

    自己创建 minidump:该篇博客中封装好的代码,下载下来,导入自己的工程,在main函数中执行有关代码,dump文件在异常时会自动写入

    程序自动生成Dump文件: 这篇文字的内容基本和上面的文章一样,只是略显乱一点,这么说应该不太合适。

    下面 我贴出头文件和main函数中应该加入的代码的代码:

    minidump.h

     1 #include
     2 #pragma comment(lib, "dbghelp.lib")
     3 
     4 
     5 bool IsDataSectionNeeded(const WCHAR* pModuleName)
     6 {
     7     if (pModuleName == 0)
     8     {
     9         return false;
    10     }
    11 
    12     WCHAR szFileName[_MAX_FNAME] = L"";
    13     _wsplitpath(pModuleName, NULL, NULL, szFileName, NULL);
    14 
    15     if (wcsicmp(szFileName, L"ntdll") == 0) return true;
    16     return false;
    17 }
    18 
    19 BOOL CALLBACK MiniDumpCallback(
    20     PVOID                            pParam,
    21     const PMINIDUMP_CALLBACK_INPUT   pInput,
    22     PMINIDUMP_CALLBACK_OUTPUT        pOutput
    23     )
    24 {
    25     if (pInput == 0 || pOutput == 0) return FALSE;
    26     switch (pInput->CallbackType)
    27     {
    28     case ModuleCallback:
    29         if (pOutput->ModuleWriteFlags & ModuleWriteDataSeg)
    30             if (!IsDataSectionNeeded(pInput->Module.FullPath))
    31                 pOutput->ModuleWriteFlags &= (~ModuleWriteDataSeg);
    32         // fall through
    33     case IncludeModuleCallback:
    34     case IncludeThreadCallback:
    35     case ThreadCallback:
    36     case ThreadExCallback:
    37         return TRUE;
    38     default:;
    39     }
    40     return FALSE;
    41 }
    42 
    43 void CreateMiniDump(EXCEPTION_POINTERS* pep, LPCSTR filename)
    44 {
    45     HANDLE hFile = CreateFile(filename, GENERIC_READ | GENERIC_WRITE,
    46         0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    47 
    48     if ((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE))
    49     {
    50         MINIDUMP_EXCEPTION_INFORMATION mdei;
    51         mdei.ThreadId = GetCurrentThreadId();
    52         mdei.ExceptionPointers = pep;
    53         mdei.ClientPointers = FALSE;
    54         MINIDUMP_CALLBACK_INFORMATION mci;
    55         mci.CallbackRoutine = (MINIDUMP_CALLBACK_ROUTINE)MiniDumpCallback;
    56         mci.CallbackParam = 0;
    57         MINIDUMP_TYPE mdt = (MINIDUMP_TYPE)(MiniDumpWithPrivateReadWriteMemory |
    58             MiniDumpWithDataSegs |
    59             MiniDumpWithHandleData |
    60             0x00000800 |
    61             0x00001000 |
    62             MiniDumpWithUnloadedModules);
    63         MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),
    64             hFile, mdt, (pep != 0) ? &mdei : 0, 0, &mci);
    65 
    66         CloseHandle(hFile);
    67     }
    68 }
    View Code

    main.cpp

     1 #include "minidump.h"
     2 
     3 #include
     4 #include
     5 
     6 
     7 
     8 LONG __stdcall MyUnhandledExceptionFilter(PEXCEPTION_POINTERS pExceptionInfo)
     9 {
    10     char creashFile[100];
    11     getcwd(creashFile, 100);
    12     strcat(creashFile, "\CreatFile.dmp");
    13     CreateMiniDump(pExceptionInfo, creashFile);
    14     return EXCEPTION_EXECUTE_HANDLER;
    15 }
    16 
    17 
    18 
    19 int main(int argc, char *argv[])
    20 {
    21     SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);
    22 
    23     //do something...
    24 
    25     return 0;
    26 
    27 
    28 
    29 }
    View Code
    如果您觉得文章不错,不妨给个打赏,写作不易,感谢各位的支持。您的支持是我最大的动力,谢谢!!! 

     

      


    很重要--转载声明

    1. 本站文章无特别说明,皆为原创,版权所有,转载时请用链接的方式,给出原文出处。同时写上原作者:朝十晚八 or Twowords
    2. 如要转载,请原文转载,如在转载时修改本文,请事先告知,谢绝在转载时通过修改本文达到有利于转载者的目的。 

  • 相关阅读:
    MsSql “with”用法
    linq更新数据冲突问题解决
    sql server 查询所有的数据库名称
    不能成功加入域的问题
    系统安全之关闭那些存在隐患的高危端口
    winform窗体上的所有控件都不显示
    sql server 创建主键
    关于sql server trace的警告信息
    ASP.NET配置文件Web.config
    运行报表提示错误:Retrieving the COM class factory for component with CLSID {11BD526015B6412D80DB12BB60B8FE50}
  • 原文地址:https://www.cnblogs.com/swarmbees/p/5621602.html
Copyright © 2020-2023  润新知