1、注册自定义的UnhandledExceptionFilter,C/C++ Runtime Library下需要注意自定义handler被移除(hook kernel32.dll的SetUnhandledExceptionFilter使它返回一个空指针即可)。

PTOP_LEVEL_EXCEPTION_FILTER    v_prevUnhandledExceptionFilter;LONG WINAPI UnhandledExceptionHandler(EXCEPTION_POINTERS* ExceptionInfo);v_prevUnhandledExceptionFilter = ::SetUnhandledExceptionFilter(UnhandledExceptionHandler);LONG WINAPI UnhandledExceptionHandler(EXCEPTION_POINTERS* ExceptionInfo)
{GenerateCrashDump(ExceptionInfo);if (v_prevUnhandledExceptionFilter != nullptr)return v_prevUnhandledExceptionFilter(ExceptionInfo);return EXCEPTION_CONTINUE_SEARCH;
}

2、调用DbgHelp.dll的MiniDumpWriteDump函数。

void GenerateCrashDump(EXCEPTION_POINTERS* ExceptionInfo)
{SYSTEMTIME st = { 0 };GetSystemTime(&st);auto path = String::Format(L"%s%04u-%02u-%02u_%02u-%02u-%02u.dmp", v_logsDir.c_str(), st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);auto dumpType = (MINIDUMP_TYPE) (MiniDumpNormal | MiniDumpWithHandleData | MiniDumpWithUnloadedModules);auto hFile = ::CreateFile(path.c_str(), GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);if (hFile == INVALID_HANDLE_VALUE)return;auto hProcess = ::GetCurrentProcess();auto processId = ::GetCurrentProcessId();MINIDUMP_EXCEPTION_INFORMATION mei = { 0 };mei.ThreadId = GetCurrentThreadId();mei.ClientPointers = FALSE;mei.ExceptionPointers = ExceptionInfo;::MiniDumpWriteDump(hProcess, processId, hFile, dumpType, &mei, nullptr, nullptr);::CloseHandle(hFile);
}

转载于:https://www.cnblogs.com/junchu25/p/3514442.html

应用程序创建自己的奔溃转储(crash dump)文件相关推荐

  1. 使用breakpad收集native奔溃日志及dump解析

    使用breakpad收集native奔溃日志及dump解析 本文是学习使用breakpad的一个总结,在这过程中看了很多博客,但是相对有用的有以下几篇: Android使用Google Breakpa ...

  2. java hs err pid_JAVA 奔溃 生成hs_err_pid****的文件,求大神看看

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 运行手机模拟器 奔溃产生hs_err_pid**** 的文件, 有大神知道这样的情况会是原因不 电脑重装还是一样, 我在想, 是不是电脑硬件的问题, 我试 ...

  3. 编写的windows程序,崩溃时产生crash dump文件的办法

    一.引言 dump文件是C++程序发生异常时,保存当时程序运行状态的文件,是调试异常程序重要的方法,所以程序崩溃时,除了日志文件,dump文件便成了我们查找错误的最后一根救命的稻草.windows程序 ...

  4. 让程序在崩溃时体面的退出之Dump文件

    在我的那篇< 让程序在崩溃时体面的退出之CallStack>中提供了一个在程序崩溃时得到CallStack的方法.可是要想得到CallStack,必须有pdb文件的支持.但是一般情况下,发 ...

  5. ubuntu虚拟机进程被杀死_vmware虚拟机奔溃,如何抢救文件

    首先说明一下,我用的是vmware15的专业版,系统是2018版的kali linux,具体的现象就是开机grub引导的时候,会显示网络启动失败,然后不停的卡在启动界面并且还不停的的闪屏. 这个也说明 ...

  6. windbg-奔溃生成的dump文件

    命令 !analyze -v 可以查看程序代码运行到哪一行崩溃 此时需要pdb符号文件 debug版是有生成的, release版需要另外配置编译参数属性: contains( CMPMODE, DB ...

  7. Lwip 奔溃掉线内存申请不出来也许大部分是竞争问题!

    系列文章目录 文章目录 目录 前言 一.程序架构 二.Bug所在 三.修复bug 总结 前言 这段时间接手一个使用lwip的项目,各种不稳定,异常crash.内存申请不出来.ping不通.当然我使用的 ...

  8. VC开发程序创建Dump文件

    以前主要做Java开发,最近接手公司老项目做升级维护,开发工具是VC6,用了ACE和WxWidgets,当调试功能时,发现程序会出现内存访问异常,所以决定通过生成Dump文件进行分析,通过学习< ...

  9. 「视频版」当线程池溢出之后,程序会奔溃吗?面试突击 007 期

    哈喽,大家好,我是老王,欢迎来到第 7 期的 Java 面试突击. 本文的面试题是,当线程池的任务溢出之后,程序会奔溃吗? 这个问题问的是关于线程池的任务数超过线程池的承载能力之后,会出现什么情况? ...

最新文章

  1. UVA11646 Athletics Track(计算几何、弧长公式)
  2. 极光大数据:00后王者大军来袭 荣耀手机偏偏独得恩宠
  3. 007-流程控制 if 语句
  4. CodeForces - 1358D The Best Vacation(前缀和+尺取)
  5. 中石油训练赛 - sciorz画画(区间dp)
  6. Netflix视频质量感知评价模型之路
  7. 在statspack显示完整的SQL
  8. [html] 如何禁止input输入的历史记录
  9. python十进制转二进制,八进制和十六进制
  10. mysql安装教程_mysql8.0.20安装教程,mysql下载安装教程8.0.20
  11. Centos7 Kubernetes(k8s) 开发服务器(单服务器)部署 kibana
  12. 车牌识别用php算法,车牌识别算法实现及其代码实现之一:车牌区域检测
  13. 【轴承故障诊断】一维深度卷积网络实现西储大学轴承故障数据分类
  14. 4.分支语句和循环语句
  15. 计算机一级怎么截图保存到桌面,电脑怎么截图?截屏?(四种方法),划重点了...
  16. xml文件怎么转换成wps_xml文件转word文档 怎么将XML文档转成WORD文档
  17. easyExcel工具
  18. 清亡之路(4):最受误解的东南互保
  19. 使用CLB部署HTTPS业务
  20. 5款电子书阅读APP,看小说的必备神器

热门文章

  1. 与狼共舞·美女与野兽
  2. 游牧大地的诗意:看龙力游的草原油画
  3. xilinx IP核技术资料
  4. python range函数怎么表示无限_Python for循环与range函数的使用详解
  5. 更新fielddata为true_线程与更新UI,细谈原理
  6. php 打开pdf文件附件,pdf里怎么链接到附件
  7. 三心二意,助你好运?
  8. 技术分享:开源矿工的超频
  9. Java编程基础阶段笔记 day04 Java基础语法(下)
  10. security和oauth2.0的整合