Virtual COM 포트를 사용하여 수동으로 Virtual Machine의 Kernel-Mode 디버깅 설정
- 아티클
- 2023. 04. 14.
이 문서의 내용
Windows용 디버깅 도구는 가상 머신의 커널 디버깅을 지원합니다. 가상 머신은 디버거와 동일한 물리적 컴퓨터 또는 동일한 네트워크에 연결된 다른 컴퓨터에 있을 수 있습니다. 이 항목에서는 KDCOM을 통해 가상 COM 포트를 사용하여 가상 머신의 디버깅을 수동으로 설정하는 방법을 설명합니다.
KDNET 가상 네트워킹을 사용하는 것이 더 빠른 옵션이며 권장됩니다. 자세한 내용은 KDNET을 사용하여 가상 머신의 네트워크 디버깅 설정을 참조하세요.
대상 가상 머신 설정
디버거를 실행하는 컴퓨터를 호스트 컴퓨터라고 하며 디버깅 중인 가상 머신을 대상 가상 머신이라고 합니다.
중요
BCDEdit를 사용하여 부팅 정보를 변경하기 전에 테스트 PC에서 BitLocker 및 보안 부팅과 같은 Windows 보안 기능을 일시적으로 일시 중단해야 할 수 있습니다. 테스트가 완료되면 이러한 보안 기능을 다시 사용하도록 설정하고 보안 기능이 비활성화된 경우 테스트 PC를 적절하게 관리합니다.
- 가상 머신의 관리자 권한 명령 프롬프트 창에서 다음 명령을 입력합니다.bcdedit /dbgsettings serial debugport:nbaudrate:115200
- 여기서 n 은 가상 머신의 COM 포트 수입니다.
- bcdedit /debug on
- 가상 머신에서 명명된 파이프에 매핑되도록 COM 포트를 구성합니다. 디버거는 이 파이프를 통해 연결됩니다. 이 파이프를 만드는 방법에 대한 자세한 내용은 가상 머신의 설명서를 참조하세요.
- 관리자 명령 프롬프트와 같이 관리자 모드에서 디버거를 시작합니다. 직렬 파이프를 통해 VM을 디버깅할 때 디버거가 관리자 권한 모드로 실행되어야 합니다. 디버거가 연결되고 실행되면 대상 VM을 다시 부팅합니다.
WinDbg를 사용하여 디버깅 세션 시작
호스트 컴퓨터에서 관리자 권한으로 WinDbg를 엽니다. 직렬 파이프를 통해 VM을 디버깅할 때 디버거가 관리자 권한 모드로 실행되어야 합니다. 파일 메뉴에서 커널 디버그를 선택합니다. 커널 디버깅 대화 상자에서 COM 탭을 엽니다. 파이프 상자를 선택하고 다시 연결 상자를 검사. 전송 속도에 115200을 입력합니다. 초기화에 0을 입력합니다.
디버거가 가상 머신과 동일한 컴퓨터에서 실행되는 경우 포트에 다음을 입력합니다.
\\.\pipe\PipeName.
디버거가 가상 머신과 다른 컴퓨터에서 실행 중인 경우 포트에 다음을 입력합니다.
\\VMHost\pipe\PipeName
확인을 선택합니다.
명령줄에서 WinDbg를 시작할 수도 있습니다. 디버거가 가상 머신과 동일한 물리적 컴퓨터에서 실행되는 경우 명령 프롬프트 창에 다음 명령을 입력합니다.
windbg -k com:pipe,port=\.\pipe\PipeName,resets=0,reconnect
디버거가 가상 머신과 다른 물리적 컴퓨터에서 실행되는 경우 명령 프롬프트 창에 다음 명령을 입력합니다.
windbg -k com:pipe,port=\\VMHost\pipe\PipeName,resets=0,reconnect
KD를 사용하여 디버깅 세션 시작
디버거와 동일한 물리적 컴퓨터에서 실행되는 가상 머신을 디버그하려면 관리자 권한 명령 프롬프트 창에 다음 명령을 입력합니다.
kd -k com:pipe,port=\.\pipe\PipeName,resets=0,reconnect
디버거와 다른 물리적 컴퓨터에서 실행되는 가상 머신을 디버그하려면 명령 프롬프트 창에 다음 명령을 입력합니다.
kd -k com:pipe,port=\\VMHost\pipe\PipeName,resets=0,reconnect
매개 변수
VMHost
가상 머신이 실행 중인 컴퓨터의 이름을 지정합니다.
PipeName
가상 머신에서 만든 파이프의 이름을 지정합니다.
resets=0
호스트와 대상이 동기화될 때 대상에 무제한으로 초기화 패킷을 보낼 수 있도록 지정합니다. 파이프가 초과 바이트를 떨어뜨리는 Microsoft Virtual PC 및 기타 가상 머신에 resets=0 매개 변수를 사용합니다. 파이프가 모든 초과 바이트를 삭제하지 않는 VMware 또는 기타 가상 머신에는 이 매개 변수를 사용하지 마세요.
다시
읽기/쓰기 오류가 발생하는 경우 디버거가 파이프의 연결을 자동으로 끊고 다시 연결하도록 합니다. 또한 디버거가 시작될 때 디버거가 명명된 파이프를 찾지 못하면 다시 연결 매개 변수로 인해 PipeName 이라는 파이프가 나타날 때까지 디버거가 대기합니다. 컴퓨터를 다시 시작하는 동안 파이프를 삭제하고 다시 만드는 가상 PC 및 기타 가상 머신에 다시 연결 합니다. 컴퓨터를 다시 시작하는 동안 파이프를 유지하는 VMware 또는 기타 가상 머신에는 이 매개 변수를 사용하지 마세요.
추가 명령줄 옵션에 대한 자세한 내용은 KD Command-Line 옵션 또는 WinDbg Command-Line 옵션을 참조하세요.
2세대 Virtual Machines
기본적으로 COM 포트는 2세대 가상 머신에 표시되지 않습니다. PowerShell 또는 WMI를 통해 COM 포트를 추가할 수 있습니다. HYPER-V 관리자 콘솔에 표시되는 COM 포트의 경우 경로를 사용하여 만들어야 합니다.
2세대 가상 머신에서 COM 포트를 사용하여 커널 디버깅을 사용하도록 설정하려면 다음 단계를 수행합니다.
- 다음 PowerShell 명령을 입력하여 보안 부팅을 사용하지 않도록 설정합니다.여기서 VmName 은 가상 머신의 이름입니다.
- Set-VMFirmware –VmnameVmName–EnableSecureBoot Off
- 다음 PowerShell 명령을 입력하여 가상 머신에 COM 포트를 추가합니다.예를 들어 다음 명령은 가상 머신 TestVM의 첫 번째 COM 포트를 구성하여 로컬 컴퓨터의 명명된 파이프 TestPipe에 연결합니다.
- Set-VMComPort –VMName TestVM 1 \\.\pipe\TestPipe
- Set-VMComPort –VMNameVmName1 \\.\pipe\PipeName
- 디버거가 연결되고 실행되면 VM을 중지하고 콜드 시작하여 VM에서 COM 포트를 활성화합니다. 에뮬레이트된 UARTS는 실제로 파이프 이름으로 구성되고 핫 추가될 수 없는 한 디버깅에 사용할 수 없습니다.
- 구성 변경 내용을 업데이트한 후 보안 부팅을 다시 사용하도록 설정합니다.
2세대 VM에 대한 자세한 내용은 2세대 가상 머신 개요를 참조하세요.
Remarks
대상 컴퓨터의 응답이 중지되었거나 이전 커널 디버깅 작업으로 인해 대상 컴퓨터가 중지되었거나 -b명령줄 옵션을 사용하면 디버거가 대상 컴퓨터로 즉시 중단됩니다.
그렇지 않으면 대상 컴퓨터가 디버거에서 중단을 명령할 때까지 계속 실행됩니다.
방화벽 및 네트워크 액세스 문제 해결
디버거(WinDbg 또는 KD)는 방화벽을 통해 액세스할 수 있어야 합니다. 네트워크 어댑터에서 지원하는 가상 직렬 포트의 경우도 마찬가지입니다.
디버거가 로드될 때 Windows에서 방화벽을 해제하라는 메시지가 표시되면 세 상자를 모두 선택합니다.
사용 중인 VM의 세부 사항에 따라 가상 머신의 네트워크 설정을 변경하여 Microsoft 커널 네트워크 디버그 어댑터에 연결해야 할 수 있습니다. 그렇지 않으면 가상 머신이 네트워크에 액세스할 수 없습니다.
Windows 방화벽
제어판 사용하여 Windows 방화벽을 통한 액세스를 허용할 수 있습니다. 제어판 > 시스템 및 보안을 열고 Windows 방화벽을 통해 앱 허용을 선택합니다. 애플리케이션 목록에서 Windows GUI 기호 디버거 및 Windows 커널 디버거를 찾습니다. 검사 상자를 사용하여 방화벽을 통해 두 애플리케이션을 허용합니다. 디버깅 애플리케이션(WinDbg 또는 KD)을 다시 시작합니다.
타사 VM
Vm 웨어 VMWare 기능(예: 다시 설정 단추)을 사용하여 가상 머신을 다시 시작하는 경우 WinDbg를 종료한 다음 WinDbg를 다시 시작하여 디버깅을 계속합니다. 가상 머신 디버깅 중에 VMWare는 CPU의 100%를 사용하는 경우가 많습니다.
참고 항목
KDNET을 사용하여 가상 머신의 네트워크 디버깅 설정
Virtual Machine 호스트의 네트워크 디버깅 설정
'[Microsoft]' 카테고리의 다른 글
직렬 케이블을 통해 수동으로 커널 모드 디버깅 설정 (0) | 2023.12.06 |
---|---|
단일 컴퓨터의 로컬 커널 디버깅 수동 설정 (0) | 2023.12.06 |
Virtual Machine의 네트워크 디버깅 설정 - KDNET (0) | 2023.12.06 |
수동으로 KDNET 네트워크 커널 디버깅 설정 (1) | 2023.12.06 |
KDNET 네트워크 커널 디버깅 자동 설정 (0) | 2023.12.06 |