c++ dmp文件生成与分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/guanyuqiu/article/details/80420758

    目前做一个项目,利用mfc做框架生成执行程序,在本机及实验室的机子里都能正常运行,但运用到远程的机器上就崩,而且好像不是程序算法的问题,不能重现很难定位,所以考虑利用dmp文件来分析。

1.dmp文件生成实现代码

头文件

#include <DbgHelp.h>
#include <tchar.h>

线程函数

LONG _stdcall ApplicationCrashHandler(PEXCEPTION_POINTERS pException)
{
	CreateDumpFile(_T("test.dmp"),pException);
	FatalAppExit(-1, _T("***Unhandled Exception!***"));
	return EXCEPTION_EXECUTE_HANDLER;
}
void CreateDumpFile(LPCTSTR lpstrDumpFilePathName, EXCEPTION_POINTERS* pException)
{
	HANDLE	hDumpFile = CreateFile(lpstrDumpFilePathName,GENERIC_READ | GENERIC_WRITE,
		FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
	if ((hDumpFile != NULL) && (hDumpFile != INVALID_HANDLE_VALUE))
	{
		MINIDUMP_EXCEPTION_INFORMATION dumpInfo;
		dumpInfo.ThreadId = GetCurrentThreadId();
		dumpInfo.ExceptionPointers = pException;
		dumpInfo.ClientPointers = TRUE;
		::MiniDumpWriteDump(::GetCurrentProcess(), ::GetCurrentProcessId(), hDumpFile, MiniDumpNormal,
			&dumpInfo, NULL, NULL);
	}
	
		CloseHandle(hDumpFile);
}

在dialog初始化中调用函数ApplicationCrashHandler(PEXCEPTION_POINTERS pException)

BOOL CCutton_DlgDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 将“关于...”菜单项添加到系统菜单中。

	// TODO: 在此添加额外的初始化代码
	SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)ApplicationCrashHandler);
	
	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

2. 工程配置

3.dmp文件分析

    生成的dmp文件必须与之前的pdb文件相对应,双击dmp文件,利用vs打开


点击 使用仅限本机 进行调试,就会定位问题的所在了。

猜你喜欢

转载自blog.csdn.net/guanyuqiu/article/details/80420758