.NET 프로덕션 환경에서 자동 디버거 및 미니덤프 생성

Source

  • Evernote/Technote scraps/Writing an automatic debugger in 15 minutes (yes, a debugger!) « TripleEmcoder.md

Summary

이 문서는 .NET 애플리케이션의 프로덕션 환경에서 발생하는 크래시(처리되지 않은 예외)를 진단하기 위해 미니덤프(Minidump)를 활용하는 방법을 다룹니다. 일반적인 로깅의 한계와 직접 디버거 연결의 위험성을 지적하며, 그 중간 해결책으로 미니덤프를 제안합니다. Windows Error Reporting(WER)이 네이티브 코드에서는 자동으로 미니덤프를 생성하지만, .NET 런타임은 처리되지 않은 예외를 자체적으로 잡아 미니덤프를 생성하지 않는다는 점을 설명합니다. 따라서 개발자는 dbghelp.dllMiniDumpWriteDump 함수를 호출하거나 ClrDump와 같은 도구를 사용하여 수동으로 미니덤프를 생성해야 합니다. 또한, 미니덤프 생성 시점을 AppDomain.UnhandledException이나 Global.asax와 같은 최상위 예외 핸들러가 아닌, 더 구체적인 컨텍스트가 유지되는 시점에 설정해야 변수 값과 호출 스택을 정확히 포착할 수 있음을 강조합니다.

Key Points

  • 프로덕션 크래시 진단은 로깅(정보 부족)과 직접 디버깅(운영 중단 위험)의 단점을 보완하기 위해 미니덤프를 사용해야 함.
  • Windows Error Reporting(WER)은 네이티브 앱의 크래시 시 자동 미니덤프 생성을 지원하지만, .NET 앱은 런타임이 예외를 처리하여 자동 미니덤프가 생성되지 않음.
  • .NET에서 미니덤프 생성을 위해서는 dbghelp.dllMiniDumpWriteDump API 호출 또는 ClrDump, ProcDump 등 외부 도구 활용이 필요함.
  • 미니덤프 생성 시점은 애플리케이션 최상위 예외 핸들러(AppDomain.UnhandledException 등)가 아닌, 호출 스택과 변수 컨텍스트가 아직 유효한 시점에 설정해야 정확한 분석이 가능함.