dmp(dump)转储文件
系统错误内存转储文件,可以把转储文件看成软件的某个时刻的一个快照。系统发生错误时转储的内存镜像,记录有发生系统错误的详细信息。windows 10系统默认的dmp转储文件路径为:%SystemRoot%MEMORY.DMP,也就是系统盘 Windows 目录下的 MEMORY.DMP 文件。
文章目录
简介
dmp文件(dump文件):系统错误内存转储文件,可以把转储文件看成软件的某个时刻的一个快照。系统发生错误时转储的内存镜像,记录有发生系统错误的详细信息。
windows 10系统默认的dmp转储文件路径为:%SystemRoot%MEMORY.DMP,也就是系统盘 Windows 目录下的 MEMORY.DMP 文件。
生成dmp文件
代码方式
开启生成pdb文件。


引入头文件和库。
包含DbgHelp.h头文件,并链接DbgHelp.lib库。
使用最新版dbghelp.dll(建议从Windows SDK获取),避免兼容性问题。
方式一:
#include <dbghelp.h>
#pragma comment(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
下载 & 安装
https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/debugger-download-tools
打开软件

打开生成的dmp文件

windbg解析
查看数据:!analyze -v

查看所有线程:~*kbn
Adplus
adplus工具位于windbg安装目录。不仅可以在程序崩溃时手动运行来生成dmp文件,也可以在崩溃之前就运行它,当程序崩溃时它会自动生成dmp文件;甚至可以在程序没有运行之前就先运行adplus,当程序崩溃时它会自动生成dmp文件。
windbg使用超详细教程
书:Memory Dump Analysis Anthology Volume
如何生成转储(dmp)文件–工具篇
更多推荐



所有评论(0)