C/C++ 使用SEH让崩溃进程转存
2023-02-18 16:46:19 时间
这段代码实现的效果是基于SEH异常实现的,一旦我们的进程崩溃了,则自动将其转存成一个dump文件,方便后期的分析工作。
#include <windows.h>
#include <DbgHelp.h>
#include<string.h>
#include<iostream>
#pragma comment( lib, "Dbghelp.lib" )
using namespace std;
void CreateDumpFile(LPCWSTR lpstrDumpFilePathName, EXCEPTION_POINTERS* pException)
{
// 创建Dump文件
HANDLE hDumpFile = CreateFile(lpstrDumpFilePathName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
// Dump信息
MINIDUMP_EXCEPTION_INFORMATION dumpInfo;
dumpInfo.ExceptionPointers = pException; // 异常信息
dumpInfo.ThreadId = GetCurrentThreadId(); // 引发异常的线程id
dumpInfo.ClientPointers = TRUE; // 则异常指针位于客户机或崩溃的进程的地址空间中
// 写入Dump文件内容
MiniDumpWriteDump(
GetCurrentProcess(),
GetCurrentProcessId(),
hDumpFile,
MiniDumpNormal, // 只包含捕获进程中所有现有线程的堆栈跟踪所需的信息
&dumpInfo, // 异常信息
NULL, // minidump文件中不包含用户定义的信息
NULL // 不指定 minidump 信息的回调
);
CloseHandle(hDumpFile);
}
LONG CrashHandler(EXCEPTION_POINTERS* pException)
{
MessageBox(NULL, L"崩溃了", L"Lyshark", MB_OK);
wstring strDumpFileName = L"C:\\lyshark.dmp";
CreateDumpFile(strDumpFileName.data(), pException);
return EXCEPTION_EXECUTE_HANDLER;
}
int main()
{
SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)CrashHandler);
int i = 13;
int j = 0;
int m = i / j;
getchar();
return 0;
}
相关文章
- Linux top命令详解 -- 罗小黑
- Linux一键重装脚本,Centos、Debain、Ubuntu随意选择
- Gitea 的邮件通知
- c++标准模板库
- php 伪静态-服务器伪静态和WordPress固定连接设置
- Python:Django框架
- 基于Django的博客开发
- PowerPhotos for Mac(mac专用图片管理工具)
- windows命令行筛选-windows下使用命令行运行PHP
- c 按照位数读取一行-C++习题 倒置排序 OpenJudge
- 笔记本怎样连接投影仪-linux(ubuntu)下外接投影仪或着显示器的方法
- 【毕业设计】单片机红外热成像仪 - 嵌入式 stm32 树莓派
- vc60修改快捷键-如何解决Visual c++不能打开文件以及工程不能添加文件的问题
- c 线程安全的单例模式-设计模式之单例模式(C++版)
- c 线程安全的单例模式-C++单例模式(线程安全、内存释放)
- 嵌入式:ARM相关开发工具概述
- 嵌入式:ARM符号定义伪操作详解
- c 线程安全的单例模式-详解C++实现线程安全的单例模式
- C++ OpenCV手动截取图像做透视变换
- 超简单的pyTorch训练->onnx模型->C++ OpenCV DNN推理(附源码地址)