.dmp 파일 생성 및 디버깅 방법
😢상황
- 프로그램이 예기치 않게 종료될 때, 자동으로 메모리 덤프(.dmp) 파일을 생성하여
나중에 문제를 분석하고 싶음 - 수동 덤프 생성이 아닌, 코드로 덤프를 남기고 싶음
🛠️해결법
1. 덤프 파일 생성 코드 추가
C++ 코드에서 MiniDumpWriteDump
를 호출하여 .dmp
파일 생성:
#include <windows.h>
#include <DbgHelp.h>
#include <filesystem>
#include <regex>
#include <sstream>
namespace fs = std::filesystem;
// 덤프 생성 함수
void CreateMiniDump(EXCEPTION_POINTERS* pep)
{
HANDLE hFile = CreateFile(_T(".\crash\CrashDump.dmp"), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile != INVALID_HANDLE_VALUE)
{
MINIDUMP_EXCEPTION_INFORMATION mdei;
mdei.ThreadId = GetCurrentThreadId();
mdei.ExceptionPointers = pep;
mdei.ClientPointers = FALSE;
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpNormal, &mdei, NULL, NULL);
CloseHandle(hFile);
}
}
// 처리되지 않은 예외 핸들러
LONG WINAPI MyUnhandledExceptionFilter(EXCEPTION_POINTERS* pExceptionInfo)
{
CreateMiniDump(pExceptionInfo);
MessageBoxA(hWnd, msg.str().c_str(), "예상치 못한 종료", MB_OK | MB_TOPMOST | MB_ICONERROR);
return EXCEPTION_EXECUTE_HANDLER;
}
💡 프로그램 진입 시 SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);
를 등록해야 작동합니다.
2. .dmp 파일 분석 방법 (요약)
생성된 .dmp
파일은 Visual Studio 또는 WinDbg로 열어 분석할 수 있습니다.
(자세한 분석 방법은 .dmp 파일을 이용한 디버깅 방법 문서를 참고)
✅정리: 왜 이게 효과 있었는가?
- 프로그램이 크래시할 때 수동 개입 없이 자동으로 덤프와 로그를 남길 수 있음
- 덤프 파일은 문제 재현이 어려운 크래시 분석에 필수적인 자료가 됨
MiniDumpWriteDump
함수는 Windows 기본 API로, 추가 설치 없이 사용 가능