Como configurar manualmente a depuração no modo kernel de uma máquina virtual usando uma porta COM virtual
As Ferramentas de Depuração para Windows dão suporte à depuração de kernel de uma máquina virtual. A máquina virtual pode estar localizada no mesmo computador físico que o depurador ou em um computador diferente conectado à mesma rede. Este tópico descreve como configurar o debug de uma máquina virtual manualmente usando uma porta COM virtual via KDCOM.
Usar a rede virtual KDNET é uma opção mais rápida e é recomendável. Para obter mais informações, consulte Como configurar a depuração de rede de uma máquina virtual - KDNET
Configurando a máquina virtual de destino
O computador que executa o depurador é chamado de computador hospedeiro, e a máquina virtual que está sendo depurada é chamada de máquina virtual de destino.
Importante
Antes de usar BCDEdit para alterar as informações de inicialização, talvez seja necessário suspender temporariamente os recursos de segurança do Windows, como BitLocker e Inicialização Segura no computador de teste. Habilite novamente esses recursos de segurança quando o teste for concluído e gerencie adequadamente o computador de teste, quando os recursos de segurança estiverem desabilitados.
Execute os seguintes comandos na janela do prompt de comando com privilégios elevados, na máquina virtual.
bcdedit /debug on
bcdedit /dbgsettings serial debugport:nbaudrate:115200
em que n é o número de uma porta COM na máquina virtual.
Na máquina virtual, configure a porta COM para mapear para um pipe nomeado. O depurador se conectará por meio desse pipe. Para obter mais informações sobre como criar esse pipe, consulte a documentação da sua máquina virtual.
Inicie o depurador no modo elevado, por exemplo, em um prompt de comando do administrador. O depurador deve estar em execução no modo elevado ao depurar uma VM em um pipe serial. Depois que o depurador estiver anexado e em execução, reinicie a VM de destino.
Iniciando a sessão de depuração usando WinDbg
No computador host, abra o WinDbg como administrador. O depurador deve estar em execução no modo elevado ao depurar uma VM em um pipe serial. No menu Arquivo, escolha Depuração de kernel. Na caixa de diálogo Depuração do Kernel, abra a guia COM. Marque a caixa Pipe e marque a caixa Reconectar . Em Taxa de transmissão, insira 115200. Em Redefinições, insira 0.
Se o depurador estiver em execução no mesmo computador que a máquina virtual, insira o seguinte em Porta.
\\.\pipe\NomePipe.
Se o depurador estiver em execução em outro computador, insira o seguinte em Porta.
\\ VMHost\pipe\NomePipe
Selecione OK.
Você também pode iniciar o WinDbg na linha de comando. Se o depurador estiver em execução no mesmo computador físico que a máquina virtual, insira o comando a seguir em uma janela do prompt de comando.
windbg -k com:pipe,port=\\.\pipe\NomePipe,resets=0,reconnect
Se o depurador estiver em execução em outro computador físico, insira o comando a seguir em uma janela do prompt de comando.
windbg -k com:pipe,port=\\VMHost\pipe\NomePipe,resets=0,reconnect
Como iniciar uma sessão de depuração usando KD
Para depurar uma máquina virtual em execução no mesmo computador físico que o depurador, insira o comando a seguir em uma janela do Prompt de Comando com privilégios elevados.
kd -k com:pipe,port=\\.\pipe\NomePipe,resets=0,reconnect
Para depurar uma máquina virtual em execução em outro computador físico, não o que tem o depurador, insira o comando a seguir em uma janela do prompt de comando.
kd -k com:pipe,port=\\VMHost\pipe\NomePipe,resets=0,reconnect
Parâmetros
VMHost
Especifica o nome do computador no qual a máquina virtual está em execução.
NomePipe
Especifica o nome do pipe que você criou na máquina virtual.
resets=0
Especifica que um número ilimitado de pacotes de redefinição pode ser enviado ao destino quando o host e o destino estão sincronizando. Use o parâmetro resets=0 para o Microsoft Virtual PC e outras máquinas virtuais cujos pipes descartam bytes em excesso. Não use esse parâmetro para VMware ou outras máquinas virtuais cujos pipes não descartam todos os bytes em excesso.
reconnect
Faz com que o depurador desconecte e reconecte automaticamente o pipe se ocorrer uma falha de leitura/gravação. Além disso, se o depurador não encontrar o pipe nomeado quando o depurador for iniciado, o parâmetro reconnect fará com que o depurador aguarde até que um pipe chamado NomePipe apareça. Use reconnect para Virtual PC e outras máquinas virtuais que destroem e recriam seus pipes durante a reinicialização do computador. Não use esse parâmetro para VMware ou outras máquinas virtuais que preservem seus pipes durante uma reinicialização do computador.
Para obter mais informações sobre opções de linha de comando adicionais, consulte Opções de linha de comando KD ou Opções de linha de comando do WinDbg.
Máquinas virtuais de geração 2
Por padrão, as portas COM não são apresentadas em máquinas virtuais de geração 2. Você pode adicionar portas COM por meio do PowerShell ou WMI. Para que as portas COM sejam exibidas no console do gerenciador de Hyper-V, elas devem ser criadas com um caminho.
Para habilitar a depuração de kernel usando uma porta COM em uma máquina virtual de geração 2, siga estas etapas:
Desabilite a Inicialização Segura inserindo este comando do PowerShell:
Set-VMFirmware –VmnameNomeVm–EnableSecureBoot Off
em que VmName é o nome da sua máquina virtual.
Adicione uma porta COM à máquina virtual inserindo este comando do PowerShell:
Set-VMComPort –VMNameNomeVm1 \\.\pipe\NomePipe
Por exemplo, o comando a seguir configura a primeira porta COM na máquina virtual TestVM para conectar-se ao pipe nomeado TestPipe no computador local.
Set-VMComPort –VMName TestVM 1 \\.\pipe\TestPipe
Depois que o depurador estiver anexado e em execução, pare e inicie a VM a frio para ativar as portas COM na VM. Os UARTS emulados não estão disponíveis para depuração, a menos que pelo menos um esteja realmente configurado com um nome de pipe e eles não possam ser adicionados a quente.
Habilite novamente a inicialização segura quando terminar de atualizar as alterações de configuração.
Para obter mais informações sobre VMs da Geração 2, consulte Visão geral da máquina virtual de geração 2.
Observações
Se o computador de destino parou de responder, ele ainda está parado devido a uma ação de depuração de kernel anterior ou você usou a opção de linha de comando-b, e o depurador interrompe o computador de destino imediatamente.
Caso contrário, o computador de destino continuará em execução até que o depurador ordene que ele seja interrompido.
Solução de problemas de firewalls e de acesso à rede
Seu depurador (WinDbg ou KD) deve ter acesso pelo firewall. Esse pode até mesmo ser o caso de portas serial virtuais compatíveis com adaptadores de rede.
Se você é solicitado pelo Windows a desativar o firewall ao carregar o depurador, selecione todas as três caixas.
Dependendo das especificidades da VM em uso, talvez seja necessário alterar as configurações de rede das máquinas virtuais para fazer a ponte entre elas para o Adaptador de Depuração de Rede do Microsoft Kernel. Caso contrário, as máquinas virtuais não terão acesso à rede.
Firewall do Windows
Você pode usar o Painel de Controle para permitir o acesso por meio do firewall do Windows. Abra o Painel de Controle > Sistema e Segurança e selecione Permitir um aplicativo por meio do Firewall do Windows. Na lista de aplicativos, localize Depurador Simbólico de GUI do Windows e Depurador de Kernel do Windows. Use as caixas de seleção para permitir esses dois aplicativos por meio do firewall. Reinicie seu aplicativo de depuração (WinDbg ou KD).
VMs de terceiros
VMWare
Se você reiniciar a máquina virtual usando os recursos do VMWare (por exemplo, o botão de reset), feche o WinDbg e abra-o novamente para continuar a depuração. Durante a depuração da máquina virtual, o VMWare geralmente consome 100% da CPU.
Consulte também
Configuração da depuração de rede de uma máquina virtual com KDNET
Como configurar manualmente a depuração no modo kernel
Configuração da depuração de rede de um host de máquina virtual