如果你还不清楚什么是转储文件,不知道什么时候需要转储文件,请参考转储文件系列文章的第一篇 —— 转储文件知多少。
前言
不知道各位小伙伴有没有遇到过 微信
或者 QQ
崩溃的情况。它们在崩溃的时候都会自动弹出一个对话框,提示用户上传相关文件,供开发人员分析问题的原因。有的小伙伴儿可能不太清楚我在说什么。没关系,下图就是微信崩溃后自动弹出的界面。
如果勾选了 发送错误报告(S)
按钮,点击 确定(O)
按钮后,会把收集到的文件上传给开发人员。同样的,如果勾选了 重启程序(R)
,点击 确定(O)
按钮后,微信会自动重启。有没有觉得很酷?我们自己的程序可以做到类似的效果吗?答案是肯定的。如果感兴趣,就请继续阅读吧!
MiniDumpWriteDump
微软提供了专门的 API
来生成转储文件,这个 API
就是 MiniDumpWriteDump()
。
BOOL MiniDumpWriteDump(
HANDLE hProcess,
DWORD ProcessId,
HANDLE hFile,
MINIDUMP_TYPE DumpType,
PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
PMINIDUMP_CALLBACK_INFORMATION CallbackParam
);
简单介绍下每个参数:
hProcess
:要转储的进程句柄。
打开进程的时候,至少需要指定PROCESS_QUERY_INFORMATION
和PROCESS_VM_READ
权限。如果需要转储 句柄信息,还需要PROCESS_DUP_HANDLE
权限。如果需要转储线程信息,需要THREAD_ALL_ACCESS
权限。ProcessId
:要转储的进程ID
。
有点不太理解为什么要额外传递一个进程ID的参数,调用GetProcessI