应用程序创建自己的奔溃转储(crash dump)文件
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)文件相关推荐
- 使用breakpad收集native奔溃日志及dump解析
使用breakpad收集native奔溃日志及dump解析 本文是学习使用breakpad的一个总结,在这过程中看了很多博客,但是相对有用的有以下几篇: Android使用Google Breakpa ...
- java hs err pid_JAVA 奔溃 生成hs_err_pid****的文件,求大神看看
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 运行手机模拟器 奔溃产生hs_err_pid**** 的文件, 有大神知道这样的情况会是原因不 电脑重装还是一样, 我在想, 是不是电脑硬件的问题, 我试 ...
- 编写的windows程序,崩溃时产生crash dump文件的办法
一.引言 dump文件是C++程序发生异常时,保存当时程序运行状态的文件,是调试异常程序重要的方法,所以程序崩溃时,除了日志文件,dump文件便成了我们查找错误的最后一根救命的稻草.windows程序 ...
- 让程序在崩溃时体面的退出之Dump文件
在我的那篇< 让程序在崩溃时体面的退出之CallStack>中提供了一个在程序崩溃时得到CallStack的方法.可是要想得到CallStack,必须有pdb文件的支持.但是一般情况下,发 ...
- ubuntu虚拟机进程被杀死_vmware虚拟机奔溃,如何抢救文件
首先说明一下,我用的是vmware15的专业版,系统是2018版的kali linux,具体的现象就是开机grub引导的时候,会显示网络启动失败,然后不停的卡在启动界面并且还不停的的闪屏. 这个也说明 ...
- windbg-奔溃生成的dump文件
命令 !analyze -v 可以查看程序代码运行到哪一行崩溃 此时需要pdb符号文件 debug版是有生成的, release版需要另外配置编译参数属性: contains( CMPMODE, DB ...
- Lwip 奔溃掉线内存申请不出来也许大部分是竞争问题!
系列文章目录 文章目录 目录 前言 一.程序架构 二.Bug所在 三.修复bug 总结 前言 这段时间接手一个使用lwip的项目,各种不稳定,异常crash.内存申请不出来.ping不通.当然我使用的 ...
- VC开发程序创建Dump文件
以前主要做Java开发,最近接手公司老项目做升级维护,开发工具是VC6,用了ACE和WxWidgets,当调试功能时,发现程序会出现内存访问异常,所以决定通过生成Dump文件进行分析,通过学习< ...
- 「视频版」当线程池溢出之后,程序会奔溃吗?面试突击 007 期
哈喽,大家好,我是老王,欢迎来到第 7 期的 Java 面试突击. 本文的面试题是,当线程池的任务溢出之后,程序会奔溃吗? 这个问题问的是关于线程池的任务数超过线程池的承载能力之后,会出现什么情况? ...
最新文章
- UVA11646 Athletics Track(计算几何、弧长公式)
- 极光大数据:00后王者大军来袭 荣耀手机偏偏独得恩宠
- 007-流程控制 if 语句
- CodeForces - 1358D The Best Vacation(前缀和+尺取)
- 中石油训练赛 - sciorz画画(区间dp)
- Netflix视频质量感知评价模型之路
- 在statspack显示完整的SQL
- [html] 如何禁止input输入的历史记录
- python十进制转二进制,八进制和十六进制
- mysql安装教程_mysql8.0.20安装教程,mysql下载安装教程8.0.20
- Centos7 Kubernetes(k8s) 开发服务器(单服务器)部署 kibana
- 车牌识别用php算法,车牌识别算法实现及其代码实现之一:车牌区域检测
- 【轴承故障诊断】一维深度卷积网络实现西储大学轴承故障数据分类
- 4.分支语句和循环语句
- 计算机一级怎么截图保存到桌面,电脑怎么截图?截屏?(四种方法),划重点了...
- xml文件怎么转换成wps_xml文件转word文档 怎么将XML文档转成WORD文档
- easyExcel工具
- 清亡之路(4):最受误解的东南互保
- 使用CLB部署HTTPS业务
- 5款电子书阅读APP,看小说的必备神器