c++ dmp文件生成与分析
程序员文章站
2024-03-21 16:58:04
...
目前做一个项目,利用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打开
点击 使用仅限本机 进行调试,就会定位问题的所在了。
上一篇: Android 开发常见内存泄漏指南
下一篇: SQL中对于关系除法的理解