欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

c++ dmp文件生成与分析

程序员文章站 2024-03-21 16:54:34
...

    目前做一个项目,利用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. 工程配置

c++ dmp文件生成与分析

3.dmp文件分析

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

c++ dmp文件生成与分析

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