[Windows Desktop] 프로그램 비정상 종료시 자동 메모리 덤프 설정하기
카테고리: Windows
문제 상황
윈도우 환경에서 배포한 프로그램이 비정상적으로 종료되나, 해당 컴퓨터에는 개발 환경이 설치되어 있지 않아 바로 디버거를 통해 확인이 불가능한 경우가 있다. Windows Error Reporting(WER)가 자동으로 수행되는 경우에는 프로그램이 예기치 않게 종료될 때 자동으로 메모리 덤프(.dmp)를 생성하지만, 그렇지 않은 경우가 훨씬 많다.
해결 방안
이런 상황에서는 레지스트리 기반 자동 덤프 설정(LocalDumps)을 쓸 수 있다. 프로그램이 뻗는 순간 자동으로 .dmp 파일이 지정된 폴더에 생성되는 방식이다.
레지스트리 경로
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting\LocalDumps\<프로세스명.exe>
- DumpFolder(덤프 저장 경로) : REG_EXPAND_SZ
- DumpType(1=MiniDump / 2=FullDump) : DWORD
- DumpCount(보관 개수 (예: 5)) : DWORD
적용 예시
뻗는 프로그램 이름이 MyApp.exe 인 경우, .reg의 내용은 다음과 같다.
Windows Registry Editor Version=5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\MyApp.exe]
"DumpFolder"="C:\\Dumps"
"DumpType"=dword:00000002
"DumpCount"=dword:00000005
단, .dmp 파일이 저장될 경로인 C:\Dumps 폴더는 미리 만들어 두어야 한다.
이 레지스트리를 등록하고 프로그램이 뻗는 순간이 도달하면 자동으로 뻗는 순간의 메모리를 저장 경로에 덤프하여 생성하게 된다. 이를 WinDbg나 VisualStudio 같은걸로 읽어들여서 Call Stack을 분석하면 된다.
정보의 바다를 헤엄치는 수달의 마음으로