windows下使用minidump获取和调试崩溃信息

本文介绍了一个简单的Windows应用程序崩溃处理方案,包括使用minidump生成崩溃转储文件,并通过Visual Studio进行调试的方法。此外还提供了使用SEH来捕获空指针等异常,以增强程序稳定性的方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

非常简单和实用的功能,先上代码

1、使用minidump获取和打印崩溃信息

#include <windows.h>
#include <ImageHlp.h>
#pragma comment(lib, "DbgHelp.lib")

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();  
	dumpInfo.ClientPointers = TRUE;  

	// 写入Dump文件内容  
	//  
	MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &dumpInfo, NULL, NULL);  

	CloseHandle(hDumpFile);  
}

LONG ApplicationCrashHandler(EXCEPTION_POINTERS *pException)  
{
	MyCreateDirectory("debug");
	CreateDumpFile(L"debug/wing.dmp", pException);  
	return EXCEPTION_EXECUTE_HANDLER;  
}

void InitCrashReport()
{
	SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)ApplicationCrashHandler);
}

使用SetUnhandledExceptionFilter设置崩溃后的回调,然后在回调函数中使用MiniDumpWriteDump写dump文件。


2、调试获取的dump文件

发布版本时要保留生成的pdb文件和对应代码(svn上打tag),获取到崩溃信息后,把dump文件pdb文件和代码放到一个目录,双击dump文件,vs就自动开始调试,如果完全匹配的话,就可以定位到具体崩溃行和上下文变量信息。


3、使用SEH捕获空指针等崩溃,保证程序大多数情况下稳定运行。

void mainLoop()
{
    __try {
        realGameLoop();
    } __exception(EXCEPTION_EXECUTE_HANDLER) {
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值