使用DbgHelp提供的MiniDumpWriteDump函数可以在程序崩溃的时候产生包含足够多信息的MiniDump文件供调试程序使用。
1. MiniDumpWriteDump的声明如下

详见: http://msdn.microsoft.com/en-us/library/windows/desktop/ms680360(v=vs.85).aspx
2. 作为示例,下面的代码段将在程序执行的当前目录下生成文件名为MyDump.dmp的DMP文件:
DWORD CreateMiniDump(EXCEPTION_POINTERS *pExceptionPointers)
{
CHAR szFileName[MAX_PATH];
HANDLE hDumpFile = NULL;
MINIDUMP_EXCEPTION_INFORMATION mdei;
//
memset(&mdei, 0x00, sizeof(MINIDUMP_EXCEPTION_INFORMATION));
mdei.ThreadId = GetCurrentThreadId();
mdei.ExceptionPointers = pExceptionPointers;
mdei.ClientPointers = FALSE;
//
// create dump file
//
memset(szFileName, 0x00, MAX_PATH);
GetModuleFileName(NULL, szFileName, MAX_PATH);
PathRemoveFileSpec(szFileName);
strcat(szFileName, "\\MyDump.dmp");
hDumpFile = CreateFile(
szFileName,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if(hDumpFile == INVALID_HANDLE_VALUE)
{
nRetCode = GetLastError();
sprintf(lpErrStr, "CreateFile: %d\n", nRetCode);
goto EXIT;
}
//
BOOL bRetCode = MiniDumpWriteDump(
GetCurrentProcess(),
GetCurrentProcessId(),
hDumpFile,
MiniDumpNormal,
&mdei,
NULL,
NULL
);
if(bRetCode != TRUE)
return(GetLastError());
return(0);
}3. 说明:可以通过指定MINIDUMP_TYPE的值来让MiniDumpWriteDump函数生成包含不同信息的DMP文件。MINIDUMP_TYPE由下述枚举定义:

详细说明:http://msdn.microsoft.com/en-us/library/windows/desktop/ms680519(v=vs.85).aspx。
1725



被折叠的 条评论
为什么被折叠?



