前一篇文章《XP在应用程序崩溃的时候产生DMP文件》说明了如何使用系统自带的工具drwtsn32,或者其他的工具产生DMP文件。
本篇文章主要说明通过Win32函数 MiniDumpWriteDump()自定义DMP文件输出,比如在应用程序的当前目录产生DMP文件。
关于这个函数的介绍,优快云上有很多文章,附上一篇比较通俗易懂的
创建Dump文件
http://blog.youkuaiyun.com/wxq1987525/article/details/6620927
代码示例:
#include "stdafx.h"
#include <Windows.h>
#include <DbgHelp.h>
#pragma comment(lib, "DbgHelp.lib")
void CreateMiniDump( LPEXCEPTION_POINTERS lpExceptionInfo) {
// Open a file
HANDLE hFile = CreateFile(_T("MiniDump.dmp"), GENERIC_READ | GENERIC_WRITE,
0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if ( hFile != NULL && hFile != INVALID_HANDLE_VALUE ) {
// Create the minidump
MINIDUMP_EXCEPTION_INFORMATION mdei;
mdei.ThreadId = GetCurrentThreadId();
mdei.ExceptionPointers = lpExceptionInfo;
mdei.ClientPointers = FALSE;
MINIDUMP_TYPE mdt = MiniDumpNormal;
BOOL retv = MiniDumpWriteDump( GetCurrentProcess(), GetCurrentProcessId(),
hFile, mdt, ( lpExceptionInfo != 0 ) ? &mdei : 0, 0, 0);
if ( !retv ) {
_tprintf( _T("MiniDumpWriteDump failed. Error: %u \n"), GetLastError() );
} else {
_tprintf( _T("Minidump created.\n") );
}
// Close the file
CloseHandle( hFile );
} else {
_tprintf( _T("CreateFile failed. Error: %u \n"), GetLastError() );
}
}
int _tmain(int argc, _TCHAR* argv[])
{
__try {
int * p = NULL;
*p = 20;
}
__except(CreateMiniDump(GetExceptionInformation()), EXCEPTION_EXECUTE_HANDLER) {
}
return 0;
}