Windows 디버깅 시작
이 문서에서는 Windows용 디버깅을 시작하는 방법을 설명합니다. 디버거를 사용하여 크래시 덤프를 분석하는 것이 목표인 경우 WinDbg를 사용하여 크래시 덤프 파일 분석을 참조하세요.
Windows 디버깅을 시작하려면 다음 단계를 완료합니다.
1. 호스트 및 대상 시스템 식별
프로세서의 명령 실행은 프로세스 중에 일반적으로 일시 중지되므로 일반적으로 두 개의 별도 컴퓨터 시스템이 디버깅에 사용됩니다. 디버거는 호스트 시스템에서 실행되며 디버그하려는 코드는 대상 시스템에서 실행됩니다.
호스트 <--------------------------------------------------> 대상
경우에 따라 가상 머신을 두 번째 시스템으로 사용할 수 있습니다. 예를 들어 가상 PC는 디버그해야 하는 코드와 동일한 PC에서 실행할 수 있습니다. 그러나 코드가 하위 수준 하드웨어와 통신하는 경우 가상 PC를 사용하는 것이 가장 좋은 방법은 아닐 수 있습니다. 자세한 내용은 가상 머신의 네트워크 디버깅 설정( KDNET)을 참조하세요.
2. 디버거 유형 확인: 커널 모드 또는 사용자 모드
다음으로 커널 모드 또는 사용자 모드 디버깅을 사용할지 여부를 결정해야 합니다.
운영 체제 및 권한 있는 프로그램은 커널 모드에서 실행됩니다. 커널 모드 코드에는 시스템의 모든 부분에 액세스할 수 있는 권한이 있으며 사용자 모드 코드와 같이 제한되지 않습니다. 커널 모드 코드는 사용자 모드 또는 커널 모드에서 실행되는 다른 프로세스의 모든 부분에 액세스할 수 있습니다. 대부분의 핵심 OS 기능과 많은 하드웨어 디바이스 드라이버는 커널 모드에서 실행됩니다.
컴퓨터의 애플리케이션 및 하위 시스템은 사용자 모드에서 실행됩니다. 사용자 모드에서 실행되는 프로세스는 자체 가상 주소 공간 내에서 실행됩니다. 시스템 하드웨어, 사용을 위해 할당되지 않은 메모리 및 시스템 무결성을 손상시킬 수 있는 시스템의 다른 부분을 포함하여 시스템의 많은 부분에 직접 액세스할 수 없습니다. 사용자 모드에서 실행되는 프로세스는 시스템 및 다른 사용자 모드 프로세스에서 효과적으로 격리되므로 이러한 리소스를 방해할 수 없습니다.
드라이버를 디버그하는 것이 목표인 경우 드라이버가 커널 모드 드라이버인지 사용자 모드 드라이버인지 확인합니다. WDM(Windows 드라이버 모델) 드라이버와 KMDF(커널 모드 드라이버 프레임워크)는 모두 커널 모드 드라이버입니다. 이름에서 알 수 있듯이 UMDF(사용자 모드 드라이버 프레임워크) 드라이버는 사용자 모드 드라이버입니다.
일부 문제의 경우 코드가 실행되는 모드를 결정하기 어려울 수 있습니다. 이 경우 하나의 모드를 선택하고 해당 모드에서 사용할 수 있는 정보를 확인해야 할 수 있습니다. 일부 문제에는 사용자 모드와 커널 모드 모두에서 디버거를 사용해야 합니다.
디버그하는 모드에 따라 다양한 방법으로 디버거를 구성하고 사용해야 할 수 있습니다. 일부 디버깅 명령은 두 모드에서 동일하게 작동하며 일부 명령은 다르게 작동합니다.
커널 모드에서 디버거를 사용하는 방법에 대해 자세히 알아봅니다.
사용자 모드에서 디버거를 사용하는 방법에 대해 자세히 알아봅니다.
3. 디버거 환경 선택
WinDbg 디버거는 대부분의 상황에서 잘 작동하지만 자동화 또는 Visual Studio에 콘솔 디버거와 같은 다른 디버거를 사용하려는 경우가 있습니다. 자세한 내용은 디버깅 환경을 참조 하세요.
4. 대상 및 호스트를 연결하는 방법 결정
일반적으로 대상 및 호스트 시스템은 이더넷 네트워크에 의해 연결됩니다. 초기 가져오기 작업을 수행하거나 디바이스에 이더넷 연결이 없는 경우 다른 네트워크 연결 옵션을 사용할 수 있습니다. 자세한 내용은 다음 문서를 참조하세요.
5. 32비트 또는 64비트 디버깅 도구 선택
32비트 또는 64비트 디버거가 필요한지 여부는 대상 및 호스트 시스템에서 실행되는 Windows 버전과 32비트 또는 64비트 코드를 디버깅하는지 여부에 따라 달라집니다. 자세한 내용은 32비트 또는 64비트 디버깅 도구 선택을 참조 하세요.
6. 기호 구성
WinDbg에서 제공하는 모든 고급 기능을 사용하려면 적절한 기호를 로드해야 합니다. 제대로 구성된 기호가 없는 경우 기호에 종속된 기능을 사용하려고 할 때 기호를 사용할 수 없다는 메시지를 받게 됩니다. 자세한 내용은 Windows 디버깅용 기호를 참조 하세요.
7. 소스 코드 구성
고유한 소스 코드를 디버그하는 것이 목표인 경우 소스 코드에 대한 경로를 구성해야 합니다. 자세한 내용은 원본 경로를 참조 하세요.
8. 디버거 작업에 익숙해짐
이 설명서의 디버거 작업 섹션에서는 다양한 작업에 대한 디버거 작업에 대해 설명합니다. 예를 들어 디버거 확장 DLL 로드는 디버거 확장을 로드하는 방법을 설명합니다.
9. 디버깅 기술에 익숙해짐
표준 디버깅 기술은 대부분의 디버깅 시나리오에 적용되며, 예를 들어 중단점 설정, 호출 스택 검사 및 메모리 누수 찾기가 있습니다. 특수 디버깅 기술은 특정 기술 또는 코드 형식에 적용됩니다. 예를 들어 플러그 앤 플레이 디버깅, KMDF 디버깅 및 RPC 디버깅이 있습니다.
10. 디버거 참조 명령 사용
디버거에서 작업할 때 다른 디버깅 명령을 사용할 수 있습니다. 디버거에서 .hh 명령을 사용하여 디버깅 명령에 대한 유용한 정보를 표시합니다. 사용 가능한 명령에 대한 자세한 내용은 디버거 참조를 참조하세요.
11. 특정 기술에 디버깅 확장 사용
do기본 관련 데이터 구조를 구문 분석하는 데 사용할 수 있는 여러 디버깅 확장이 있습니다. 자세한 내용은 특수 확장을 참조 하세요.
12. 관련 Windows 내부 사항에 대해 알아보기
이 설명서에서는 핵심 Windows 내부 요소에 대한 지식이 있다고 가정합니다. 메모리 사용량, 컨텍스트, 스레드 및 프로세스를 비롯한 Windows 내부 요소에 대해 자세히 알아보려면 Pavel Yosifovich, Mark E. Russinovich, David A. Solomon 및 Alex Ionescu의 Windows Internals와 같은 리소스를 검토할 수 있습니다.
13. 추가 디버깅 리소스 검토
다른 리소스에는 다음 책과 비디오가 포함됩니다.
- Windows 디버깅 내부: Tarik Soulami의 실용적인 디버깅 및 추적 전략
- Mario Hewardt 및 Daniel Pravat의 고급 Windows 디버깅
- 조각 모음 도구 비디오 시리즈, 에피소드 13 ~ 29, WinDbg에 대한 모든