.NET 고급 디버깅 - WinDbg 디버깅 입문

.NET 고급 디버깅 분야에서必不可결한 도구이자 강력한 도구로, WinDbg는 일상적인 문제 분석 및 해결에 필수적인 도구입니다. 이 기회를 통해 WinDbg를 통해 .NET 고급 디버깅에 대해 깊이 있는 내용을 공유하고자 합니다.

오늘은 입문자들을 위한 기초적인 내용을 시작으로, 먼저 WinDbg가 무엇인지 살펴보겠습니다.

Windows 디버거(Windows Debugger), 약칭으로 WinDbg는 다음과 같은 작업에 사용할 수 있는 강력한 도구입니다:

  • 커널 모드와 유저 모드 코드 디버깅
  • Crash dump 분석
  • 코드 실행 중 CPU 레지스터 정보 확인

WinDbg를 통해 아래와 같은 문제를 분석할 수 있습니다:

  • 스레드 고정
  • 메모리 누수
  • 실행 중인 스레드 스택 및 변수 분석
  • 프로세스 Crash 원인 분석
  • CPU 사용률 분석
  • CLR异常 분석 및 디버깅
  • ...

다음부터 WinDbg의 설치 및 환경 구성 방법에 대해 알아보겠습니다.

1. WinDbg 설치 및 환경 구성

a. 설치 파일 다운로드

추천 다운로드 링크: https://raw.githubusercontent.com/EasyDarwin/Tools/master/Windbg_x86_x64/dbg_amd64.msi

또는 Windows Store에서 WingDbg Preview 버전 설치도 가능합니다.

다운로드 후 설치 단계를 차례대로 진행하면 됩니다.

b. 디버깅 심볼 구성

为什么 설정할까요? 이 설명은 다음을 포함한高级 디버깅 기능을 활용하려면 적절한 디버깅 심볼을 로드해야 합니다. 예를 들어 .NET CLR 프로그램 스택을 분석할 때에는 해당하는 디버깅 심볼이 필요합니다.

Microsoft는 다음과 같이 통합된 디버깅 서비스 서버를 제공합니다:

http://msdl.microsoft.com/download/symbols

이 주소를 통해 다운로드된 디버깅 심볼을 로컬에 캐시하고, WinDbg 디버깅시 사용할 수 있도록 구성합니다.

다음은 관련 설정 예시입니다:

srv*c:\symcache*http://msdl.microsoft.com/download/symbols;c:\symcache

c. 디버깅 확장 모듈 설치 및 사용

WinDbg 디버깅 확장은 WinDbg 디버깅의 핵심입니다. 다양한 디버깅 확장 모듈을 활용하면 .NET 프로그램 디버깅을 편리하게 수행할 수 있습니다.

기본적으로 WinDbg의 디버깅 명령어는 제한적입니다. 따라서 필요한 디버깅 확장 모듈을 설치해야 합니다.

SOS 디버깅 확장: 이 확장 모듈은 .NET Framework 설치와 함께 제공됩니다. 사용 방법은 다음과 같습니다:

.load sos clr

SOS DLL의 위치는 .NET 버전에 따라 달라집니다:

  • 4.0 32-bit: C:\윈도우즈\미โครซอфт닷넷\프레임워크\v4.0.30319
  • 4.0 64-bit: C:\윈도우즈\미โครซอфт닷넷\프레임워크64\v4.0.30319

MEX 디버깅 확장: 이 확장 모듈은 Microsoft Support 엔지니어들이 프로세스 애플리케이션 디버깅에 사용하는 데 널리 채택된 도구입니다.

다운로드 주소: https://www.microsoft.com/en-us/download/details.aspx?id=53304

다운로드 후 32/64-bit용 MEX.dll을 WinDbg 설치 디렉토리에 복사합니다. 예를 들어:

C:\\프로그램 파일\\디버깅 툴즈 포 윈도우즈 (x64)\\MEX.dll

자세한 사용 방법은 아래 링크를 참조하세요: https://github.com/REhints/WinDbg/tree/master/MEX

WinDbg 설치 및 구성이 완료되면 기본 디버깅 명령어에 대해 알아보겠습니다.

2. 기본 디버깅 명령어

a. WinDbg 자체 디버깅 명령어

더 많은 명령어를 확인하려면 아래 링크를 참조하세요: https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/getting-started-with-windbg

b. SOS 디버깅 확장에서 자주 사용되는 명령어

c. MEX 디버깅 확장에서 자주 사용되는 명령어

MEX 확장 명령어에 대한 더 많은 정보는 아래 링크를 참조하세요: https://github.com/REhints/WinDbg/tree/master/MEX

이상이 WinDbg 디버깅 입문편의 전반적인 설명입니다. 앞으로具적인 케이스를 통해 각 명령어의 사용 방법을 살펴볼 예정입니다.

태그: dbg dbg-ext clr-debug

6월 21일 20:56에 게시됨