디버깅 환경
사용 가능한 디버깅 환경은 6가지입니다.
- WinDbg
- WinDbg(클래식)
- KD(커널 디버거)
- NTKD
- 콘솔 디버거(CDB)
- NTSD(NT 심볼 디버거)
다음 섹션에서는 디버깅 환경에 대해 설명합니다.
Windbg
WinDbg는 최신 시각적 개체, 더 빠른 창 및 확장 가능한 디버거 데이터 모델 전면과 중앙으로 빌드된 본격적인 스크립팅 환경을 갖춘 최신 버전의 WinDbg입니다. WinDbg는 WinDbg(클래식)와 동일한 기본 엔진을 사용하므로 사용하던 모든 명령, 확장 및 워크플로가 이전처럼 계속 작동합니다.
자세한 내용은 WinDbg 기능을 참조 하세요.
WinDbg(클래식)
Microsoft Windows 디버거 WinDbg(클래식)는 사용자 모드 및 커널 모드 디버깅을 모두 수행할 수 있는 Windows 기반 디버거입니다. WinDbg는 Windows 커널, 커널 모드 드라이버 및 시스템 서비스뿐만 아니라 사용자 모드 애플리케이션 및 드라이버에 대한 디버깅을 제공합니다.
WinDbg는 소스 수준 디버깅에 Visual Studio 디버그 기호 형식을 사용합니다. PDB 기호 파일이 있는 모듈에서 기호 또는 변수에 액세스할 수 있으며 COFF 기호 파일(예: Windows .dbg 파일)으로 컴파일된 모듈에 의해 노출되는 모든 공용 함수의 이름에 액세스할 수 있습니다.
WinDbg는 소스 코드를 보고, 중단점을 설정하고, 변수(C++ 개체 포함), 스택 추적 및 메모리를 볼 수 있습니다. 디버거 명령 창을 사용하면 다양한 명령을 실행할 수 있습니다.
커널 모드 디버깅의 경우 WinDbg에는 일반적으로 두 대의 컴퓨터(호스트 컴퓨터 및 대상 컴퓨터)가 필요합니다. WinDbg는 사용자 모드 및 커널 모드 대상 모두에 대한 다양한 원격 디버깅 옵션도 지원합니다.
WinDbg는 CDB/NTSD 및 KD/NTKD에 대응하는 그래픽 인터페이스입니다.
Kd
Microsoft KD(커널 디버거)는 모든 NT 기반 운영 체제에서 커널 모드 활동을 심층 분석할 수 있는 문자 기반 콘솔 프로그램입니다. KD를 사용하여 커널 모드 구성 요소 및 드라이버를 디버그하거나 운영 체제 자체의 동작을 모니터링할 수 있습니다. KD는 다중 프로세서 디버깅도 지원합니다.
일반적으로 KD는 디버그 중인 컴퓨터에서 실행되지 않습니다. 커널 모드 디버깅을 위해 두 대의 컴퓨터(호스트 컴퓨터 및 대상 컴퓨터)가 필요합니다.
NTKD
NTKD라는 KD 디버거의 변형이 있습니다. KD는 시작 시 새 텍스트 창을 생성하는 반면 KD는 호출된 명령 프롬프트 창을 상속한다는 점을 제외하고 모든 면에서 KD와 동일합니다.
Cdb
Microsoft CDB(콘솔 디버거)는 Windows 사용자 모드 메모리 및 구문을 하위 수준 분석할 수 있는 문자 기반 콘솔 프로그램입니다. 이름 콘솔 디버거 는 CDB가 콘솔 애플리케이션으로 분류된다는 사실을 나타내는 데 사용됩니다. 대상 애플리케이션이 콘솔 애플리케이션이어야 한다는 의미는 아닙니다. 실제로 CDB는 콘솔 애플리케이션과 그래픽 Windows 프로그램을 모두 디버깅할 수 있습니다.
CDB는 현재 실행 중이거나 최근에 중단된 프로그램(라이브 분석)을 디버깅하는 데 매우 강력하지만 설정이 간단합니다. 작동 중인 애플리케이션의 동작을 조사하는 데 사용할 수 있습니다. 실패한 애플리케이션의 경우 CDB를 사용하여 스택 추적을 가져오거나 유죄 매개 변수를 확인할 수 있습니다. 문자 기반이므로 네트워크(원격 액세스 서버 사용)에서 잘 작동합니다.
CDB를 사용하면 프로그램 코드를 표시 및 실행하고, 중단점을 설정하고, 메모리의 값을 검사하고 변경할 수 있습니다. CDB는 이진 코드를 디스어셈블하고 어셈블리 지침을 표시하여 이진 코드를 분석할 수 있습니다. 소스 코드를 직접 분석할 수도 있습니다.
CDB는 주소 또는 전역 기호를 통해 메모리 위치에 액세스할 수 있으므로 주소가 아닌 이름으로 데이터 및 지침을 참조하여 코드의 특정 섹션을 쉽게 찾고 디버그할 수 있습니다. CDB는 여러 스레드 및 프로세스의 디버깅을 지원합니다. 확장 가능하며 페이징된 메모리와 페이징되지 않은 메모리를 모두 읽고 쓸 수 있습니다.
대상 애플리케이션 자체가 콘솔 애플리케이션인 경우 대상은 CDB와 콘솔 창을 공유합니다. 대상 콘솔 애플리케이션에 대해 별도의 콘솔 창을 생성하려면 -2 명령줄 옵션을 사용합니다.
Ntsd
Microsoft NTSD(심볼 디버거)라는 CDB 디버거의 변형이 있습니다. CDB는 시작 시 새 텍스트 창을 생성하는 반면 CDB는 호출된 명령 프롬프트 창을 상속한다는 점을 제외하고 모든 면에서 CDB와 동일합니다.
시작 명령을 사용하여 새 콘솔 창을 생성할 수도 있으므로 다음 두 가지 구성은 동일한 결과를 제공합니다.
start cdb parameters
ntsd parameters
커널 디버거(Visual Studio, WinDbg 또는 KD)에서 제어할 수 있도록 NTSD(또는 CDB)에서 입력 및 출력을 리디렉션할 수 있습니다. 이 기술을 NTSD와 함께 사용하면 콘솔 창이 전혀 표시되지 않습니다. 따라서 커널 디버거에서 NTSD를 제어하는 것은 대상 애플리케이션을 포함하는 컴퓨터에 거의 부담을 주지 않는 매우 간단한 디버거가 발생하므로 특히 유용합니다. 이 조합을 사용하여 시스템 프로세스를 디버그하고, 종료하고, 부팅의 이후 단계를 수행할 수 있습니다. 자세한 내용은 커널 디버거에서 사용자 모드 디버거 제어를 참조하세요.