KDbgCtrl 사용
KDbgCtrl(커널 디버깅 컨트롤, kdbgctrl.exe) 도구를 사용하여 대상 컴퓨터에서 커널 디버깅 연결을 제어할 수 있습니다.
이 도구를 사용하려면 대상 컴퓨터에서 Windows Server 2003 이상 버전의 Windows를 실행해야 합니다.
KDbgCtrl은 전체 커널 디버깅, 자동 커널 디버깅, 사용자 모드 오류 처리, 커널 디버깅 차단 및 DbgPrint 버퍼의 크기 등 다섯 가지 설정을 제어할 수 있습니다.
KDbgCtrl을 사용하려면 마지막 부팅 전에 대상 컴퓨터의 부팅 설정에서 커널 디버깅을 이미 사용하도록 설정해야 합니다. 이 작업이 수행되지 않은 경우 KDbgCtrl을 사용하여 커널 디버깅을 사용하도록 설정할 수 없습니다. 이러한 부팅 설정에 대한 자세한 내용은 부팅 매개 변수를 참조 하여 디버깅 을 사용하도록 설정합니다.
전체 커널 디버깅
전체 커널 디버깅을 사용하도록 설정하면 호스트 컴퓨터에서 실행되는 커널 디버거가 대상 컴퓨터에 침입할 수 있습니다. 커널 모드 예외가 발생하면 대상 컴퓨터가 커널 디버거에 침입합니다. 대상에서 호스트로 보내는 메시지(예: DbgPrint 출력, 기호 로드 메시지 및 리디렉션된 사용자 모드 디버거)도 허용됩니다.
이 설정을 사용하지 않도록 설정하면 호스트 컴퓨터의 모든 신호가 대상에서 무시됩니다.
전체 커널 디버깅은 기본적으로 사용하도록 설정됩니다. 현재 설정 값을 검사 kdbgctrl -c를 사용합니다. 이 설정을 사용하지 않도록 설정하려면 kdbgctrl -d를 사용합니다. 이 설정을 사용하려면 kdbgctrl -e를 사용합니다.
현재 설정을 검사 배치 파일 내에서 실행을 제어하는 데 사용하려는 경우 kdbgctrl -cx 명령을 사용할 수 있습니다. 이 명령에 대한 자세한 내용은 KDbgCtrl 명령줄 옵션을 참조 하세요.
자동 커널 디버깅
전체 커널 디버깅을 사용하도록 설정하면 자동 커널 디버깅에 대한 현재 설정이 비물질적이므로 모든 통신이 허용됩니다.
전체 커널 디버깅을 사용하지 않도록 설정하고 자동 커널 디버깅을 사용하도록 설정하면 대상 컴퓨터만 디버깅 연결을 시작할 수 있습니다.
이 경우 커널 모드 예외, 중단점 또는 기타 커널 모드 이벤트만 연결이 설정됩니다. 연결은 DbgPrint 출력, 기호 로드 메시지, 리디렉션된 사용자 모드 디버거 입력 및 출력 또는 기타 유사한 메시지에 대해 설정되지 않습니다. 이러한 메시지는 커널 디버거로 전송되는 대신 DbgPrint 버퍼에 저장됩니다.
예외 또는 이벤트로 인해 대상이 커널 디버거에 침입하는 경우 kdbgctrl -e를 실행한 것처럼 전체 커널 디버깅이 자동으로 켜집니다.
자동 커널 디버깅은 기본적으로 사용하지 않도록 설정됩니다(전체 커널 디버깅도 사용하지 않는 한 비물질적임). 현재 설정 값을 검사 kdbgctrl -ca를 사용합니다. 이 설정을 사용하지 않도록 설정하려면 kdbgctrl -da를 사용합니다. 이 설정을 사용하려면 kdbgctrl -ea를 사용합니다.
사용자 모드 오류 처리
사용자 모드 오류 처리를 사용하도록 설정하면 일부 사용자 모드 이벤트로 인해 대상 컴퓨터가 커널 디버거에 침입합니다.
특히 디버거에 의해 코드에 삽입된 중단점 또는 DbgBreakPoint 호출과 같은 모든 int 3 인터럽트는 커널 디버거에 중단을 발생합니다. 그러나 액세스 위반 및 0으로 나누기와 같은 표준 예외는 일반적으로 커널 디버거로 전송되지 않습니다.
사용자 모드 디버거가 프로세스에 이미 연결된 경우 이 디버거는 모든 사용자 모드 오류를 캡처하고 커널 디버거는 변경되지 않습니다. 다양한 사용자 모드 오류 처리기의 우선 순위는 사후 관리 디버깅 사용을 참조 하세요.
사용자 모드 오류 처리가 작동하려면 전체 커널 디버깅 또는 자동 커널 디버깅도 사용하도록 설정해야 합니다.
사용자 모드 오류 처리는 기본적으로 사용하도록 설정됩니다. 현재 설정 값을 검사 kdbgctrl -cu를 사용합니다. 이 설정을 사용하지 않도록 설정하려면 kdbgctrl -du를 사용합니다. 이 설정을 사용하려면 kdbgctrl -eu를 사용합니다.
커널 디버깅 차단
경우에 따라 커널 디버깅을 위해 대상 컴퓨터를 설정하려고 하지만 대상 컴퓨터가 시작될 때까지 커널 디버깅을 사용하도록 대기할 수 있습니다. 커널 디버깅을 차단하여 이 작업을 수행할 수 있습니다.
Important
BCDEdit를 사용하여 부팅 정보를 변경하기 전에 테스트 PC에서 BitLocker 및 보안 부팅과 같은 Windows 보안 기능을 일시적으로 일시 중단해야 할 수 있습니다. 테스트가 완료되면 이러한 보안 기능을 다시 사용하도록 설정하고 보안 기능이 비활성화된 경우 테스트 PC를 적절하게 관리합니다.
커널 디버깅을 차단하려면 다음과 유사한 명령을 사용하여 대상 컴퓨터를 설정합니다.
bcdedit /debug on
bcdedit /dbgsettings 1394 channel:32 /start DISABLE /noumex
대상 컴퓨터를 다시 시작하면 커널 디버깅을 위해 준비되지만 커널 디버깅 및 사용자 모드 오류 처리는 사용하지 않도록 설정됩니다. 이때 호스트 컴퓨터는 대상 컴퓨터에 연결할 수 없으며, 버그 검사 커널 디버거에 의해 catch되지 않으며, 사용자 모드 예외로 인해 커널 디버거가 중단되지 않습니다.
준비가 되면 다음 명령을 입력하여 커널 디버깅을 사용하도록 설정할 수 있습니다(대상 컴퓨터를 다시 시작하지 않고).
kdbgctrl -db
kdbgctrl -e
나중에 다음 명령을 입력하여 커널 디버깅을 사용하지 않도록 설정할 수 있습니다.
kdbgctrl -d
kdbgctrl -eb
kdbgctrl -cb를 사용하여 커널 디버깅이 차단되었는지 여부를 검사 수 있습니다.
DbgPrint 버퍼 크기
DbgPrint 버퍼는 대상 컴퓨터가 커널 디버거에 보낸 메시지를 저장합니다.
전체 커널 디버깅을 사용하도록 설정하면 이러한 메시지가 커널 디버거에 자동으로 표시됩니다. 그러나 이 옵션을 사용하지 않도록 설정하면 이러한 메시지가 버퍼에 저장됩니다. 나중에 커널 디버깅을 사용하도록 설정하고, 커널 디버거에 연결하고, !dbgprint 확장을 사용하여 이 버퍼의 내용을 볼 수 있습니다. 이 버퍼에 대한 자세한 내용은 DbgPrint 버퍼를 참조하세요.
DbgPrint 버퍼의 기본 크기는 Windows 무료 빌드에서 4KB입니다. 현재 버퍼 크기를 확인하려면 kdbgctrl -cdb를 사용합니다. 버퍼 크기를 변경하려면 kdbgctrl -sdb Size를 사용합니다. 여기서 Size는 새 버퍼 크기를 지정합니다. 구문 세부 정보는 KDbgCtrl 명령줄 옵션을 참조 하세요.
예
현재 설정을 모두 표시하려면 다음 명령을 사용합니다.
kdbgctrl -c -ca -cu -cb -cdb
기본 설정을 복원하려면 다음 명령을 사용합니다.
kdbgctrl -e -da -eu -db -sdb 0x1000
예외에 대해서만 연결되도록 호스트 컴퓨터를 잠그려면 다음 명령을 사용합니다.
kdbgctrl -d -ea -eu
모든 커널 디버깅을 사용하지 않도록 설정하려면 다음 명령을 사용합니다.
kdbgctrl -d -da
모든 커널 디버깅을 사용하지 않도록 설정하는 경우 DbgPrint 버퍼의 크기를 늘릴 수도 있습니다. 이렇게 하면 나중에 확인해야 하는 경우 모든 메시지가 저장됩니다. 여유 메모리가 MB인 경우 다음 명령을 사용할 수 있습니다.
kdbgctrl -sdb 0x100000