三、使用MiniDumpWriteDump API实现自定义Dump捕获
对于需要更精细控制Dump生成时机和类型的场景,开发者可直接调用MiniDumpWriteDump函数。该方法允许在程序中主动捕获Dump文件,例如在全局异常处理中。
1. 引入DbgHelp.h头文件与链接库
#include
#pragma comment(lib, "dbghelp.lib")
2. 示例代码:捕获Mini Dump
LONG WINAPI MyUnhandledExceptionFilter(PEXCEPTION_POINTERS pExceptionInfo)
{
HANDLE hFile = CreateFile(_T("C:\\Dumps\\crash.dmp"), GENERIC_READ | GENERIC_WRITE,
0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile != INVALID_HANDLE_VALUE)
{
MINIDUMP_EXCEPTION_INFORMATION mdei;
mdei.ThreadId = GetCurrentThreadId();
mdei.ExceptionPointers = pExceptionInfo;
mdei.ClientPointers = FALSE;
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile,
MiniDumpNormal, &mdei, NULL, NULL);
CloseHandle(hFile);
}
return EXCEPTION_EXECUTE_HANDLER;
}
3. 设置全局异常处理器
SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);