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. 工程配置
3.dmp文件分析
生成的dmp文件必须与之前的pdb文件相对应,双击dmp文件,利用vs打开
点击 使用仅限本机 进行调试,就会定位问题的所在了。
推荐阅读
-
c++ dmp文件生成与分析
-
java实现数字(摘要)签名,生成签名文件,防止文件被人篡改内容,分析和实现
-
C++二进制文件读写,以及数据的拼合与还原
-
NDK学习笔记<七> 使用AndroidStudio本身,编译C/C++文件生成SO文件
-
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
-
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
-
使用Java生成jpg与压缩图片为jpg文件的代码示例
-
php生成与读取excel文件
-
关于ubuntu下vscode+C/C++多项目文件的编译与调试
-
C# 解析 Excel 并且生成 Csv 文件代码分析