카테고리:

1 분 소요

문제 상황

윈도우 환경에서 배포한 프로그램이 비정상적으로 종료되나, 해당 컴퓨터에는 개발 환경이 설치되어 있지 않아 바로 디버거를 통해 확인이 불가능한 경우가 있다. 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을 분석하면 된다.

태그: .dmp, Dump, LocalDumps, Memory, Memory Dump, Regedit, Registry, VisualStudio, WER, WinDbg, Windows Error Reporting, 덤프, 레지스트리, 메모리, 메모리 덤프, 프로그램

업데이트:

정보의 바다를 헤엄치는 수달의 마음으로

syudal 이미지 프로필