VC开发程序创建Dump文件

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

    我下载了windbg6.11.0001.402版本,在VC项目中compile的include路径增加windbg目录下sdk\inc目录,link的library path增加windbg目录下sdk\lib\(对应的系统)目录,连接库增加dbghelp.lib定义或在程序中写#pragma comment(lib,"dbghelp.lib")。
    在程序的主函数文件中增加如下代码:

#include <dbghelp.h>

void createDumpFile(LPCWSTR lpstrDumpFilePathName, EXCEPTION_POINTERS *pException)
{
	// 创建Dump文件
	//
	HANDLE hDumpFile = CreateFile((const char*)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)
{	
	createDumpFile((unsigned short*)(_T("e:\\testaced.dmp")), pException);
	
	return EXCEPTION_EXECUTE_HANDLER;
}

通过在主main函数中写如下代码,会在程序崩溃时产生dump文件

SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)applicationCrashHandler);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值