Windows Dump
Writing a Minidump with Code
The actual implementation is straightforward. The following is a simple example of how to use MiniDumpWriteDump.
#include <dbghelp.h>
#include <shellapi.h>
#include <shlobj.h>
int GenerateDump(EXCEPTION_POINTERS* pExceptionPointers)
{
BOOL bMiniDumpSuccessful;
WCHAR szPath[MAX_PATH];
WCHAR szFileName[MAX_PATH];
WCHAR* szAppName = L"AppName";
WCHAR* szVersion = L"v1.0";
DWORD dwBufferSize = MAX_PATH;
HANDLE hDumpFile;
SYSTEMTIME stLocalTime;
MINIDUMP_EXCEPTION_INFORMATION ExpParam;
GetLocalTime( &stLocalTime );
GetTempPath( dwBufferSize, szPath );
StringCchPrintf( szFileName, MAX_PATH, L"%s%s", szPath, szAppName );
CreateDirectory( szFileName, NULL );
StringCchPrintf( szFileName, MAX_PATH, L"%s%s\\%s-%04d%02d%02d-%02d%02d%02d-%ld-%ld.dmp",
szPath, szAppName, szVersion,
stLocalTime.wYear, stLocalTime.wMonth, stLocalTime.wDay,
stLocalTime.wHour, stLocalTime.wMinute, stLocalTime.wSecond,
GetCurrentProcessId(), GetCurrentThreadId());
hDumpFile = CreateFile(szFileName, GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_WRITE|FILE_SHARE_READ, 0, CREATE_ALWAYS, 0, 0);
ExpParam.ThreadId = GetCurrentThreadId();
ExpParam.ExceptionPointers = pExceptionPointers;
ExpParam.ClientPointers = TRUE;
bMiniDumpSuccessful = MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),
hDumpFile, MiniDumpWithDataSegs, &ExpParam, NULL, NULL);
return EXCEPTION_EXECUTE_HANDLER;
}
void SomeFunction()
{
__try
{
int *pBadPtr = NULL;
*pBadPtr = 0;
}
__except(GenerateDump(GetExceptionInformation()))
{
}
}
Category
See also
Favorite site
- MSDN: Using Dump Files
- 키보드 입력으로 메모리 덤프 생성하는 방법
- Windows 기능을 사용하여 메모리 덤프 파일을 키보드로 생성 가능
- Windows 메모리 덤프 개요와 설정 방법
- 윈도우 7 메모리 덤프 생성 과정 변경
- jkmoon.tistory.com - 메모리 덤프 설정
- 자신의 심볼을 이용하기 : 소스서버를 이용한 소스인덱싱
- 메모리 덤프(Memory dump) 분석하기 2
- Windows Dump 파일 분석하기
- MSDN: Windows에서 디버깅을 위해 만든 작은 메모리 덤프 파일을 읽는 방법
- 윈도우 7 메모리 덤프 생성 과정 변경
- Debugging Tips (7) - Application Memory Dump 분석하기 (part 2)
- Visual Studio 로 디버깅하는 방법(Dump, pdb 파일이용)
- Slideshare - 덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012