다음을 통해 공유


Windows 디버깅 시작

이 문서에서는 WinDbg 및 기타 디버깅 도구를 사용하여 Windows 디버깅을 시작하는 방법을 설명합니다. 다음을 배우게 됩니다:

  • 디버거 설치 및 호스트 및 대상 시스템 설정
  • 디버깅 환경 구성
  • 커널 모드 및 사용자 모드 시나리오에 대한 마스터 필수 디버깅 기술

메모: 대신 크래시 덤프를 분석하려면 WinDbg를 사용하여 크래시 덤프 파일 분석을 참조하세요.

Windows 디버깅을 시작하려면 다음 단계를 완료합니다.

1. Windows 디버거 설치

WinDbg를 설치하여 Windows 애플리케이션 및 드라이버 디버깅을 시작합니다. 자세한 설치 단계는 WinDbg 설치를 참조하세요.

2. 호스트 및 대상 시스템 식별

프로세서의 명령 실행은 프로세스 중에 일반적으로 일시 중지되므로 일반적으로 두 개의 별도 컴퓨터 시스템이 디버깅에 사용됩니다. 디버거는 호스트 시스템에서 실행되며 디버그하려는 코드는 대상 시스템에서 실행됩니다.

호스트 <--------------------------------------------------> 대상

호스트 및 대상 디버깅 시스템을 연결하는 이중 화살표를 보여 주는 다이어그램의 스크린샷

경우에 따라 가상 머신을 두 번째 시스템으로 사용할 수 있습니다. 예를 들어 가상 PC는 디버그해야 하는 코드와 동일한 PC에서 실행할 수 있습니다. 그러나 코드가 하위 수준 하드웨어와 통신하는 경우 가상 PC를 사용하는 것이 가장 좋은 방법은 아닐 수 있습니다. 자세한 내용은 가상 머신의 네트워크 디버깅 설정 (KDNET)을 참조하세요.

3. 디버거 유형 확인: 커널 모드 또는 사용자 모드

다음으로 커널 모드 또는 사용자 모드 디버깅을 사용할지 여부를 결정해야 합니다.

  • 운영 체제 및 권한 있는 프로그램은 커널 모드실행됩니다. 커널 모드 코드에는 시스템의 모든 부분에 액세스할 수 있는 권한이 있으며 사용자 모드 코드와 같이 제한되지 않습니다. 커널 모드 코드는 사용자 모드 또는 커널 모드에서 실행되는 다른 프로세스의 모든 부분에 액세스할 수 있습니다. 대부분의 핵심 OS 기능과 많은 하드웨어 디바이스 드라이버는 커널 모드에서 실행됩니다.

  • 컴퓨터의 애플리케이션 및 하위 시스템은사용자 모드로 실행됩니다. 사용자 모드에서 실행되는 프로세스는 자체 가상 주소 공간 내에서 실행됩니다. 시스템 하드웨어, 사용을 위해 할당되지 않은 메모리 및 시스템 무결성을 손상시킬 수 있는 시스템의 다른 부분을 포함하여 시스템의 많은 부분에 직접 액세스할 수 없습니다. 사용자 모드에서 실행되는 프로세스는 시스템 및 다른 사용자 모드 프로세스에서 효과적으로 격리되므로 이러한 리소스를 방해할 수 없습니다.

드라이버를 디버그하는 것이 목표인 경우 드라이버가 커널 모드 드라이버인지 사용자 모드 드라이버인지 확인합니다. WDM(Windows 드라이버 모델) 드라이버와 KMDF(Kernel-Mode 드라이버 프레임워크)는 모두 커널 모드 드라이버입니다. 이름에서 알 수 있듯이 User-Mode 드라이버 프레임워크(UMDF) 드라이버는 사용자 모드 드라이버입니다.

일부 문제의 경우 코드가 실행되는 모드를 결정하기 어려울 수 있습니다. 이 경우 하나의 모드를 선택하고 해당 모드에서 사용할 수 있는 정보를 확인해야 할 수 있습니다. 일부 문제에는 사용자 모드와 커널 모드 모두에서 디버거를 사용해야 합니다.

디버그하는 모드에 따라 다양한 방법으로 디버거를 구성하고 사용해야 할 수 있습니다. 일부 디버깅 명령은 두 모드에서 동일하게 작동하며 일부 명령은 다르게 작동합니다.

커널 모드 디버깅을 위한 다음 단계

사용자 모드 디버깅을 위한 다음 단계

4. 디버거 환경 선택

WinDbg 디버거는 대부분의 상황에서 잘 작동하지만 자동화 또는 Visual Studio에 콘솔 디버거와 같은 다른 디버거를 사용하려는 경우가 있습니다. 자세한 내용은 디버깅 환경참조하세요.

5. 대상 및 호스트를 연결하는 방법 결정

일반적으로 이더넷 네트워크를 사용하여 대상 및 호스트 시스템을 연결합니다. 초기 가져오기 작업을 수행하거나 디바이스에 이더넷 연결이 없는 경우 다른 네트워크 연결 옵션을 사용할 수 있습니다. 자세한 내용은 다음 문서를 참조하세요.

6. 32비트 또는 64비트 디버깅 도구 선택

32비트 또는 64비트 디버거가 필요한지 여부는 대상 및 호스트 시스템에서 실행되는 Windows 버전과 32비트 또는 64비트 코드를 디버깅하는지 여부에 따라 달라집니다. 자세한 내용은 32비트 또는 64비트 디버깅 도구 선택을 참조하세요.

7. 기호 구성

WinDbg에서 제공하는 모든 고급 기능을 사용하려면 적절한 기호를 로드해야 합니다. 기호를 제대로 구성하지 않으면 기호에 의존하는 기능을 사용하려고 할 때 기호를 사용할 수 없음을 나타내는 메시지가 표시됩니다. 자세한 내용은 Windows 디버깅 기호을 참조하세요.

8. 소스 코드 구성

고유한 소스 코드를 디버그하는 것이 목표인 경우 소스 코드에 대한 경로를 구성해야 합니다. 자세한 내용은 원본 경로참조하세요.

9. 디버거 작업에 익숙해짐

이 설명서의 디버거 작업 섹션에서는 다양한 작업에 대한 디버거 작업에 대해 설명합니다. 예를 들어 WinDbg에서 로그 파일 유지하기는 디버깅 세션을 기록하는 로그 파일을 WinDbg가 작성하는 방법을 설명합니다.

10. 디버깅 기술에 익숙해짐

표준 디버깅 기술은 대부분의 디버깅 시나리오에 적용될 있으며, 예를 들어 중단점 설정, 호출 스택 검사 및 메모리 누수 찾기가 있습니다. 특수 디버깅 기술은 특정 기술이나 코드 형식에 적용됩니다. 플러그 앤 플레이 디버깅, KMDF 디버깅 및 RPC 디버깅을 예로 들어 보겠습니다.

11. 디버거 참조 명령 사용

디버거에서 작업할 때 다른 디버깅 명령을 사용할 수 있습니다. 디버깅하는 동안 명령에 대한 도움말을 보려면 명령 이름 뒤에 명령을 사용합니다 .hh .

:

.hh bp # Get help on breakpoint commands
.hh k # Get help on call stack commands

사용 가능한 명령의 전체 목록은 디버거 참조를 참조하세요.

12. 특정 기술에 디버깅 확장 사용

여러 디버깅 확장을 사용하여 도메인별 데이터 구조를 구문 분석할 수 있습니다. 자세한 내용은 특수 확장참조하세요. 디버거 확장을 로드하는 방법에 대한 자세한 내용은 디버거 확장 DLL 로드를 참조하세요.

이 설명서에서는 핵심 Windows 내부 요소에 대한 지식이 있다고 가정합니다. 메모리 사용량, 컨텍스트, 스레드 및 프로세스를 비롯한 Windows 내부 요소에 대해 자세히 알아보려면 Pavel Yosifovich, Mark E. Russinovich, David A. Solomon 및 Alex Ionescu의 Windows Internals 와 같은 리소스를 검토할 수 있습니다.

14. 추가 디버깅 리소스 검토

다른 리소스에는 다음 책과 비디오가 포함됩니다.

  • Windows 디버깅 속으로: 실용적인 디버깅 및 추적 전략 by Tarik Soulami
  • 마리오 헤워드와 다니엘 프라바트의 고급 Windows 디버깅
  • Defrag 도구 비디오 시리즈, 13회부터 29회까지, WinDbg에 관한 모든 것

다음 단계

계속하려면 디버깅 모드를 선택합니다.

커널 모드 디버깅 (드라이버 및 OS 구성 요소용):

사용자 모드 디버깅 (애플리케이션의 경우):

추가 설정 지침: