一直以来觉着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

转载于:https://www.cnblogs.com/swarmbees/p/5621602.html

vs 自动生成core dump文件相关推荐

  1. Linux下如何生成core dump 文件(解决segment fault段错误的问题)

    Linux下如何生成core dump 文件(解决segment fault段错误的问题) 参考文章: (1)Linux下如何生成core dump 文件(解决segment fault段错误的问题) ...

  2. core dump文件

    core dump文件 core dump 又叫核心转储,是一个程序运行时的环境一个集合包,包含崩溃时的堆栈信息,是一个二进制文件,没法使用记事本打开,通常会在指定目录下生成一个core文件.core ...

  3. Linux core dump文件设置以及查看

    1.查看当前系统是否生成core dump文件 ulimit -c 0:表示当前不生成core dump文件 大于0的数:表示当前生成的core dump文件大小限制在该值以内,单位是Kb. unli ...

  4. dotnet core调试docker下生成的dump文件

    最近公司预生产环境.net core应用的docker容器经常出现内存暴涨现象,有时会突然吃掉几个G,触发监控预警,造成容器重启. 分析了各种可能原因,修复了可能发生的内存泄露,经测试本地正常,但是发 ...

  5. 记录linux 生成crash dump文件步骤

    转载自:https://blog.csdn.net/weixin_42987033/article/details/81746074 执行文件编译时加入-g 命令 例如 g++ -g test.cpp ...

  6. linux dump 文件位置,查询和修改Linux操作系统生成core dump文件的路径

    1.core文件的生成开关和大小限制 (1)使用ulimit -c命令可查看core文件的生成开关.若结果为0,则表示关闭了此功能,不会生成core文件. (2)使用ulimit -c filesiz ...

  7. Linux上Core Dump文件的形成和分析

    Core,又称之为Core Dump文件,是Unix/Linux操作系统的一种机制,对于线上服务而言,Core令人闻之色变,因为出Core的过程意味着服务暂时不能正常响应,需要恢复,并且随着吐Core ...

  8. [Android]生成heap dump文件(.hprof)

    Android生成heap dump文件(.hprof) 一个heap dump就是一个程序heap的快照,能够获知程序的哪些部分正在使用大部分的内存. 它保存为一种叫做HPROF的二进制格式.对于A ...

  9. 用MyEclipse自动生成hibernate映射文件和实体类

    创建web工程,使用Hibernate的时候,在工程里一个一个创建实体类太麻烦,浪费时间,现在教大家如何用MyEclipse自动生成Hibernate映射文件及实体类 方法/步骤 1 创建数据库,创建 ...

  10. Wix 安装部署教程(十六) -- 自动生成多语言文件

    Wix 安装部署教程(十六) -- 自动生成多语言文件 原文:Wix 安装部署教程(十六) -- 自动生成多语言文件 因为持续集成需要,所有项目编译完之后生成一个多语言的安装包.之前生成mst文件都是 ...

最新文章

  1. Android之ListActivity(一):布局与数据绑定
  2. 一款零注解侵入的 API 文档生成工具,你用过吗?
  3. 面试官:精通 Mybatis?请回答下这几个问题
  4. Oracle 表的连接方式(1)-----Nested loop join和 Sort merge join
  5. 一个很奇怪的css#behavior#saveHistory
  6. sklearn 数据预处理1: StandardScaler
  7. 代理ip网站开发_网站反爬虫策略,用代理IP都能解决吗?
  8. python 网络请求类库 requests 使用
  9. java面试题及答案2020
  10. alpine安装curl
  11. 基于单片机的HC-SR04超声波模块测距仪设计(数码管显示)
  12. 2021年人口普查结果分析
  13. SpringCloud微服务---学习笔记(二)--多级缓存
  14. 【蓝桥杯】~C语言数组排序
  15. Oracle 并行操作
  16. 解决并隐藏h5页面在新版微信iOS 端出现底部白色导航条
  17. Run-down Protection
  18. 【常用传感器】LCD1602液晶工作原理详解及例程代码
  19. Permission denied: user=dr.who, access=READ_EXECUTE, inode=/tmp:root:supergroup:drwx------
  20. github上的开源项目中gif图片的制作软件

热门文章

  1. WPF 微信 MVVM 【续】发送部分QQ表情
  2. bzoj3224: Tyvj 1728 普通平衡树
  3. switch_case,,||,条件操作符和逗号操作符,循环语句
  4. pj2--图书管理系统
  5. ajax hash缓存
  6. Android中Socket大文件断点上传
  7. Camshift算法(1)
  8. ESS And 迅雷5 让我不能上网
  9. mybaties中的selectKey和useGeneratedKeys=true
  10. 刷新后保持大分类和小分类的展开状态