前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C/C++ 使用SEH让崩溃进程转存

C/C++ 使用SEH让崩溃进程转存

作者头像
微软技术分享
发布2022-12-28 17:48:10
4190
发布2022-12-28 17:48:10

这段代码实现的效果是基于SEH异常实现的,一旦我们的进程崩溃了,则自动将其转存成一个dump文件,方便后期的分析工作。

代码语言:javascript
复制
#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;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-07-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档