다음을 통해 공유


모드 전환

커널 디버거에서 사용자 모드 디버깅을 제어하는 경우 네 가지 모드가 발생하며 다양한 방법으로 전환할 수 있습니다.

참고 이 시나리오를 설명할 때 대상 애플리케이션 은 디버깅 중인 사용자 모드 애플리케이션을 참조하고, 대상 컴퓨터는 대상 애플리케이션과 CDB 또는 NTSD 프로세스가 포함된 컴퓨터를 참조하고, 호스트 컴퓨터 는 커널 디버거가 포함된 컴퓨터를 참조합니다.

다음 네 가지 모드가 발생합니다.

사용자 모드 디버깅
대상 컴퓨터 및 대상 애플리케이션이 고정됩니다. 커널 디버거의 디버거 명령 창 에 사용자 모드 디버깅 프롬프트가 나타납니다. WinDbg에서 WinDbg 창의 아래쪽 패널에 있는 프롬프트에 입력>이 표시됩니다. 사용자 모드 디버깅 중에 입력된 것처럼 이 프롬프트에서 명령을 입력하여 대상 애플리케이션의 상태를 분석하거나 실행 또는 실행을 단계별로 실행할 수 있습니다. 디버거가 액세스하는 기호 파일, 확장 DLL 및 기타 파일은 호스트 컴퓨터가 아닌 대상 컴퓨터의 파일입니다.

대상 애플리케이션 실행
대상 컴퓨터가 실행되고, 대상 애플리케이션이 실행 중이며, 디버거가 대기 중입니다. 이 모드는 대상이 일반 디버깅에서 실행되도록 하는 것과 동일합니다.

절전 모드
대상 컴퓨터가 실행 중이지만 대상 애플리케이션이 고정되고 두 디버거가 모두 고정됩니다. 이 모드는 대상 컴퓨터에서 작업을 수행해야 하지만 디버깅 세션의 상태를 변경하지 않으려는 경우에 유용합니다.

커널 모드 디버깅
대상 컴퓨터와 대상 애플리케이션이 고정됩니다. 커널 모드 디버깅 프롬프트 kd> 가 커널 디버거의 디버거 명령 창에 나타납니다. 이 모드는 일반적인 커널 모드 디버깅 상태입니다.

세션은 사용자 모드 디버깅 모드에서 시작됩니다. 다음 작업 및 이벤트로 인해 모드가 변경됩니다.

  • 사용자 모드 디버깅에서 대상 애플리케이션 실행으로 전환하려면 프롬프트에서 Input>g(Go) 명령을 사용합니다.

  • 일시적으로 사용자 모드 디버깅에서 대상 애플리케이션 실행으로 전환한 다음 사용자 모드 디버깅으로 돌아가려면 단계, 추적 또는 기타 임시 실행 명령을 사용합니다. 이러한 명령 목록은 대상 제어를 참조하세요.

  • 사용자 모드 디버깅에서 절전 모드로 전환하려면 .sleep(디버거 일시 중지) 명령을 사용합니다. 이 명령은 시간이 초과되었습니다. 시간이 만료되면 시스템은 사용자 모드 디버깅으로 돌아갑니다.

  • 사용자 모드 디버깅에서 커널 모드 디버깅으로 전환하려면 .breakin(커널 디버거로 중단) 명령을 사용합니다. 호출 프로세스에 관리자 권한이 없는 경우 액세스 거부 오류로 .breakin 이 실패할 수 있습니다. 이 경우 짧은 .sleep 명령을 실행하고 Ctrl+C를 눌러 KD로 전환합니다.

  • 특정 환경에서만 대상 애플리케이션 실행에서 사용자 모드 디버깅으로 전환할 수 있습니다. 대상 컴퓨터에서 Microsoft Windows XP 또는 이후 버전의 Windows 운영 체제를 실행하는 경우 !bpid 확장 명령을 사용할 수 있습니다. NTSD가 아닌 CDB를 사용하는 경우 대상 컴퓨터에서 CDB 창을 활성화하고 Ctrl+C를 누릅니다.

  • 대상 애플리케이션이 중단점에 도달하거나, 예외가 발생하거나, 다른 제어된 이벤트가 발생하거나, 종료되면 시스템은 대상 애플리케이션 실행에서 사용자 모드 디버깅으로 전환됩니다. 특히 NTSD를 사용하는 경우 이러한 이벤트를 미리 계획해야 합니다. 이러한 이벤트에 대한 자세한 내용은 중단점 사용예외 및 이벤트 제어를 참조하세요.

  • 대상 애플리케이션 실행에서 커널 모드 디버깅으로 전환하려면 KD 창에서 Ctrl+C를 누르거나 Ctrl+BREAK를 누르거나 WinDbg 창의 디버그 메뉴에서 중단을 클릭하거나 대상 컴퓨터 키보드에서 SYSRQ 또는 ALT+SYSRQ를 누릅니다. 커널 디버거가 KD이고 커널 디버거가 사용자 모드 디버거와 통신하는 동시에 Ctrl+C를 누르면 사용자 모드 디버거가 Ctrl+C를 누르는 것을 캡처할 수 있습니다.

  • 디버거에 커널 오류가 발생하거나 Breakin.exe 도구를 사용하는 경우 시스템은 대상 애플리케이션 실행에서 커널 모드 디버깅으로 전환합니다.

  • 절전 모드에서 사용자 모드 디버깅으로 전환하려면 절전 모드가 만료되기를 기다리거나 , -wake 명령줄 옵션을 사용하여 대상 컴퓨터에서 새 CDB 프로세스를 시작하거나, 대상 컴퓨터의 다른 CDB 또는 NTSD 복사본에서 .wake(Wake 디버거) 명령을 사용합니다.

  • 커널 모드 디버깅에서 전환하려면 프롬프트에서 kd>g(Go) 명령을 사용합니다. 이 명령은 사용자 모드 디버깅 또는 대상 애플리케이션 실행으로 돌아갑니다(둘 중 가장 최근에 사용한 상태임).