admin 管理员组文章数量: 1184232
简介
dmp文件(dump文件): 系统错误内存转储文件 ,可以把转储文件看成软件的某个时刻的一个快照。系统发生错误时转储的内存镜像,记录有发生系统错误的详细信息。
windows 10系统默认的dmp转储文件路径为:%SystemRoot%MEMORY.DMP,也就是系统盘 Windows 目录下的 MEMORY.DMP 文件。
生成dmp文件
代码方式
开启生成pdb文件。
引入头文件和库。
包含DbgHelp.h头文件,并链接DbgHelp.lib库。
使用最新版
dbghelp.dll
(建议从Windows SDK获取),避免兼容性问题。
方式一:
#include<dbghelp.h>#pragmacomment(lib,"dbghelp.lib")方式二:
设置未处理异常过滤器。
在应用程序初始化时,注册异常处理回调。
BOOL CMyApp::InitInstance(){// 设置未处理异常过滤器SetUnhandledExceptionFilter(GenerateDump);...}生成Dump文件。
LONG WINAPI GenerateDump(EXCEPTION_POINTERS* pException){// 生成带时间戳的Dump文件名
SYSTEMTIME st;GetLocalTime(&st);
TCHAR szFileName[MAX_PATH];_stprintf_s(szFileName,_T("C:\\Dumps\\Crash_%04d%02d%02d%02d%02d%02d.dmp"),
st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);// 创建Dump文件
HANDLE hFile =CreateFile(szFileName, GENERIC_WRITE,0,NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,NULL);if(hFile == INVALID_HANDLE_VALUE)return EXCEPTION_EXECUTE_HANDLER;// 写入Dump内容
MINIDUMP_EXCEPTION_INFORMATION ExInfo ={0};
ExInfo.ThreadId =GetCurrentThreadId();
ExInfo.ExceptionPointers = pException;
ExInfo.ClientPointers = FALSE;MiniDumpWriteDump(GetCurrentProcess(),GetCurrentProcessId(),
hFile,
static_cast<MINIDUMP_TYPE>(MiniDumpWithFullMemory | MiniDumpWithHandleData | MiniDumpWithThreadInfo),&ExInfo,NULL,NULL);CloseHandle(hFile);return EXCEPTION_EXECUTE_HANDLER;}控制Dump内容:
MiniDumpWriteDump的第四个参数控制Dump内容:
MiniDumpNormal: 基础信息(调用栈、线程等)。
MiniDumpWithFullMemory: 包含完整进程内存。
MiniDumpWithHandleData: 包含句柄信息。
MiniDumpWithThreadInfo: 包含线程状态信息。
ClientPointers
ClientPointers = FALSE
:用于当前进程自身的崩溃处理(最常见场景)。
ClientPointers = TRUE
:用于跨进程调试或外部诊断工具(需额外处理内存访问)。如果从一个外部进程(如调试器)调用 MiniDumpWriteDump 生成 Dump,且异常信息来自目标进程。
发布
发布时保留
.pdb
文件,以便用WinDbg或Visual Studio分析Dump。
任务管理器
原则
:用32位任务管理器给32位进程(无论该进程是运行在32位还是64位系统上面)生成转储文件,用64位任务管理器给64位进程生成转储文件。在64位系统上,32位的任务管理器位于
C:\Windows\SysWOW64\taskmgr.exe
。
生成方法 :右键进程 --> 创建转储文件–>弹出对话框提示生成成功,以及dmp文件位置。
ps:路径可在注册表中配置(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps)
Windbg
解析dmp文件
可以使用 Debugging Tools 或 BlueScreenView 打开dmp文件进行分析。
Windbg
下载 & 安装
打开软件
打开生成的dmp文件
windbg解析
查看数据:
!analyze -v
查看所有线程:
~*kbn
Adplus
adplus工具位于windbg安装目录。不仅可以在程序崩溃时手动运行来生成dmp文件,也可以在崩溃之前就运行它,当程序崩溃时它会自动生成dmp文件;甚至可以在程序没有运行之前就先运行adplus,当程序崩溃时它会自动生成dmp文件。
书:Memory Dump Analysis Anthology Volume
版权声明:本文标题:一学就会:DMP转储文件的简易操作指南 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1772102276a3552154.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论