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);

猜你喜欢

转载自blog.csdn.net/johnnywww/article/details/81016930