Configurar a depuração do kernel de rede KDNET manualmente
As Ferramentas de Depuração para Windows dão suporte à depuração de kernel em uma rede. Este artigo descreve como configurar a depuração de rede manualmente.
Importante
Configurar uma depuração de rede manualmente é um processo complexo e propenso a erros. Para configurar a depuração de rede automaticamente, consulte Como configurar a depuração automática do kernel de rede KDNET. O uso do utilitário KDNET é altamente recomendado para todos os usuários do depurador.
O computador que executa o depurador é chamado de computador hoste o computador que está sendo depurado é chamado de computador de destino. O computador host deve estar executando o Windows 7 ou posterior e o computador de destino deve estar executando o Windows 8 ou posterior.
A depuração em uma rede tem as seguintes vantagens em comparação com a depuração em relação a outros tipos de conectividade.
- O host e os computadores de destino podem estar em qualquer lugar na rede local.
- É fácil depurar muitos computadores de destino a partir de um computador host.
- Considerando dois computadores, é provável que ambos tenham adaptadores Ethernet. É menos provável que ambos tenham portas serial ou 1394 portas.
- A depuração de rede é mais rápida do que a depuração de porta serial.
Adaptadores de rede com suporte
O computador host pode usar qualquer adaptador de rede, mas o computador de destino deve usar um adaptador de rede compatível com as Ferramentas de Depuração para Windows. Para obter uma lista de adaptadores de rede suportados, consulte NICs Ethernet suportadas para depuração de kernel de rede no Windows 11 e NICs Ethernet suportadas para depuração de kernel de rede no Windows 10.
Instalar as Ferramentas de depuração para Windows
Confirme se as Ferramentas de Depuração para Windows estão instaladas no sistema host. Para obter informações sobre como baixar e instalar as ferramentas do depurador, consulte Ferramentas de Depuração para Windows.
Determinar o endereço IP do computador host
Use um dos procedimentos a seguir para determinar o endereço IP do computador host.
No computador host, abra um prompt de comando e insira o seguinte comando:
ipconfig
Anote o endereço IPv4 do adaptador de rede que você pretende usar para depuração.
No computador de destino, abra um prompt de comando e insira o seguinte comando, em que YourIPAddress é o endereço IP do computador host:
ping -4 <YourIPAddress>
Escolher uma porta para depuração de rede
Escolha um número de porta para depuração nos computadores host e de destino. Você pode escolher qualquer número de 49152 a 65535. O intervalo recomendado é de 50000 a 50039. A porta escolhida é aberta para acesso exclusivo pelo depurador em execução no computador host. Tome cuidado para escolher um número de porta que não seja usado por outros aplicativos executados no computador host.
Nota
O intervalo de números de porta que pode ser usado para depuração de rede pode ser limitado pela diretiva de rede da empresa. Não há como dizer do computador host quais são as limitações. Para determinar se a política da sua empresa limita o intervalo de portas que podem ser usadas para depuração de rede, verifique com os administradores de rede.
Se você conectar vários computadores de destino a um único computador host, cada conexão deverá ter um número de porta exclusivo. Por exemplo, se você conectar 100 computadores de destino a um único computador host, poderá atribuir a porta 50000 à primeira conexão, porta 50001 à segunda conexão e assim por diante.
Nota
Um computador host diferente poderia usar o mesmo intervalo de portas (50000 a 50099) para se conectar a outros 100 computadores de destino.
Configurar o computador de destino
Verifique se o computador de destino tem um adaptador de rede com suporte. Para obter mais informações, consulte:
Conecte o adaptador compatível a um hub ou switch de rede usando um cabo de rede apropriado.
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 forem desabilitados.
Em um prompt de comando com privilégios elevados, insira os seguintes comandos, em que w.x.y.z é o endereço IP do computador host e n é um número de porta de sua escolha:
bcdedit /debug on bcdedit /dbgsettings net hostip:w.x.y.z port:n
BCDEdit exibe uma chave gerada automaticamente. Copie a chave e armazene-a em um dispositivo de armazenamento removível, como uma unidade flash USB. Você precisa da chave ao iniciar uma sessão de depuração no computador host.
Use o Gerenciador de Dispositivos para determinar os números de barramento, dispositivo e função PCI para o adaptador que você deseja usar para depuração. Esses valores são exibidos no Gerenciador de Dispositivos em Local na guia Geral. Em seguida, em um prompt de comando elevado, digite o seguinte comando a seguir, em que b, d e f são o número do barramento, o número do dispositivo e o número da função do adaptador:
bcdedit /set "{dbgsettings}" busparams b.d.f
O PC de destino será reinicializado depois que um depurador de kernel for conectado.
Nota
Se você pretende instalar a função Hyper-V no computador de destino, consulte Como configurar a depuração de rede de um host de máquina virtual.
Cuidado Se o computador de destino estiver em uma dock station, e você tiver a depuração de rede habilitada para um adaptador de rede que faz parte da dock station, não remova o computador da dock station. Se você precisar remover o computador de destino da dock station, desative a depuração do kernel primeiro. Para desabilitar a depuração de kernel no computador de destino, abra uma linha de comando como administrador e digite o comando bcdedit /debug off
. Reinicialize o computador de destino.
Iniciar a sessão de depuração
Confirme se o adaptador de rede do computador host está conectado a um hub de rede ou a um switch usando um cabo de rede apropriado.
No computador host, abra o WinDbg. No menu Arquivo, selecione Depuração de kernel. Na caixa de diálogo Depuração do kernel, abra a guia Rede. Insira o número da porta e a chave. Selecione OK.
Você também pode iniciar uma sessão com o WinDbg abrindo um prompt de comando e inserindo o seguinte comando, em que n é o número da porta e MyKey é a chave que foi gerada automaticamente pelo BCDEdit ao configurar o computador de destino:
windbg -k net:port=<n>,key=<MyKey>
Se você for solicitado a permitir que o WinDbg acesse a porta por meio do firewall, permita que o WinDbg acesse a porta para os três tipos de rede diferentes.
Usar o KD
No computador host, abra um prompt de comando. Insira o seguinte comando, em que n é o número da porta e MyKey é a chave gerada automaticamente pelo BCDEdit ao configurar o computador de destino:
kd -k net:port=<n>,key=<MyKey>
Se você precisar decidir sobre permitir que o WinDbg acesse a porta por meio do firewall, permita que o WinDbg acesse a porta para os três tipos de rede diferentes.
Reiniciar o computador de destino
Quando o depurador estiver conectado e aguardando conexão, reinicie o computador de destino. Uma maneira de reiniciar o computador é usar esse comando no prompt de comando de um administrador:
shutdown -r -t 0
Quando o destino for reiniciado, o depurador no sistema operacional host deverá se conectar.
Depois de se conectar ao destino no host, pressione a tecla de espaço no depurador para iniciar a depuração.
Permitir que o depurador passe pelo firewall
Ao tentar estabelecer uma conexão de depuração de rede pela primeira vez, você pode ser solicitado a permitir que o aplicativo de depuração (WinDbg ou KD) acesse por meio do firewall. As versões do cliente do Windows exibem o prompt, mas as versões do servidor do Windows não exibem o prompt. Você deve responder ao prompt marcando as caixas para os três tipos de rede: domínio, privado e público.
Se você não receber o prompt ou se não tiver marcado as caixas quando o prompt estiver disponível, deverá usar o Painel de Controle para permitir o acesso por meio do firewall no computador host em que o depurador está sendo executado. Abra Painel de Controle > sistema e segurança e selecione Permitir um aplicativo por meio do Firewall do Windows.
(WinDbg) Na lista de aplicativos, localize Processo do mecanismo do WinDbg (TCP) (todos).
(WinDbg clássico) Na lista de aplicativos, localize Windows GUI Symbolic Debugger e Windows Kernel Debugger.
Use as caixas de seleção para permitir esses aplicativos por meio do firewall. Reinicie seu aplicativo de depuração (WinDbg ou KD).
Chave de criptografia
Para manter o computador de destino seguro, os pacotes que viajam entre o host e os computadores de destino devem ser criptografados. Você deve usar uma chave de criptografia gerada automaticamente (fornecida pelo BCDEdit ao configurar o computador de destino). O uso de uma chave de criptografia gerada automaticamente é recomendado, pois ela é mais segura e fornece um valor exclusivo que é usado para estabelecer a conexão com um destino específico.
A depuração de rede usa uma chave de 256 bits especificada como quatro valores de 64 bits, na base 36, separados por pontos. Cada valor de 64 bits é especificado usando até 13 caracteres. Caracteres válidos são as letras um até z e os dígitos 0 a 9. Caracteres especiais não são permitidos.
Para especificar sua própria chave, abra um prompt de comando com privilégios elevados no computador de destino. Insira o seguinte comando, em que w.x.y.z
é o endereço IP do computador host, n é o número da porta e Key é sua chave:
bcdedit /dbgsettings net hostip:w.x.y.z port:n key:Key
O computador alvo precisa ser reinicializado toda vez que as dbgsettings forem alteradas.
Dicas de solução de problemas
O aplicativo de depuração deve receber permissão por meio de firewalls
Ao tentar estabelecer uma conexão de depuração de rede pela primeira vez, você pode ser solicitado a permitir que o aplicativo de depuração (WinDbg ou KD) acesse por meio do firewall. As versões do cliente do Windows exibem o prompt, mas as versões do servidor do Windows não exibem o prompt. Você deve responder ao prompt marcando as caixas para os três tipos de rede: domínio, privado e público.
Se você não receber o prompt ou se não marcar as caixas quando o prompt estiver disponível, deverá usar o Painel de Controle para permitir o acesso por meio do firewall. Abra Painel de Controle > sistema e segurança e selecione Permitir um aplicativo por meio do Firewall do Windows.
(WinDbg) Na lista de aplicativos, localize Processo do mecanismo do WinDbg (TCP) (todos).
(WinDbg Clássico) Na lista de aplicativos, localize Windows GUI Symbolic Debugger e Windows Kernel Debugger.
Use as caixas de seleção para permitir esses aplicativos por meio do firewall. Role para baixo e selecione OK para salvar as alterações de firewall. Reinicie o depurador.
O número da porta deve estar no intervalo permitido pela política de rede
O intervalo de números de porta que pode ser usado para depuração de rede pode ser limitado pela diretiva de rede da empresa. Para determinar se a política da sua empresa limita o intervalo de portas que podem ser usadas para depuração de rede, verifique com o administrador de rede. No computador de destino, abra um prompt de comando como administrador e insira o comando bcdedit /dbgsettings
. A saída será semelhante à seguinte:
C:\> bcdedit /dbgsettings
key XXXXXX.XXXXX.XXXXX.XXXXX
debugtype NET
hostip 169.168.1.1
port 50085
dhcp Yes
The operation completed successfully.
Na saída anterior, o valor da porta é 50085. Se o valor da porta estiver fora do intervalo permitido pelo administrador de rede, insira o comando a seguir. O valor w.x.y.z é o endereço IP do computador host e YourDebugPort é um número de porta no intervalo permitido.
bcdedit /dbgsettings net hostip:w.x.y.z port:YourDebugPort
Depois de alterar as configurações do depurador do computador de destino, execute novamente o depurador no computador host com a nova configuração de porta e reinicie o computador de destino.
Usar ping para testar a conectividade
Se o depurador não se conectar, use o comando ping no computador de destino para verificar a conectividade.
C:\>Ping <HostComputerIPAddress>
Nota
Isso pode não funcionar se o computador host não estiver configurado para ser detectável na rede, pois o firewall pode bloquear solicitações de ping. Se o firewall bloquear solicitações de ping, você não obterá respostas ao executar ping no host.
Como o depurador obtém um endereço IP para o computador de destino
O KDNET no computador de destino tenta usar o Protocolo DHCP para obter um endereço IP roteável para o adaptador de rede que está sendo usado para depuração. Se o KDNET obtiver um endereço atribuído por DHCP, o computador de destino poderá ser depurado por computadores host localizados em qualquer lugar da rede. Se a KDNET não conseguir obter um endereço atribuído a DHCP, ela usará a APIPA (Endereçamento IP Privado Automático) para obter um endereço IP de link local. Endereços IP de link local não são roteáveis, portanto, um host e um destino não podem usar um endereço IP de link local para se comunicar por meio de um roteador. Nesse caso, a depuração de rede funcionará se você conectar o host e os computadores de destino ao mesmo hub ou switch de rede.
Sempre especifique busparams ao configurar o KDNET em uma máquina física com uma NIC baseada em PCI
Se você estiver configurando o KDNET em uma máquina física com uma placa de rede baseada em PCI ou PCIe, deverá sempre especificar os busparams para a NIC que deseja usar para o KDNET. Para especificar os parâmetros de barramento, abra o Gerenciador de Dispositivos e localize o adaptador de rede que você deseja usar para depuração. Abra a página de propriedades do adaptador de rede e anote o número do barramento, o número do dispositivo e o número da função exibidos em Local na guia Geral. Em um prompt de comando elevado, digite o seguinte comando, em que b, d e f são os números de barramento, dispositivo e função no formato decimal:
bcdedit /set "{dbgsettings}" busparams b.d.f
Quando o depurador estiver em execução no computador host e aguardando a conexão, reinicie o computador de destino usando o seguinte comando:
shutdown -r -t 0
Manualmente, excluir entradas do BCDEdit
A exclusão manual normalmente não é necessária, mas é fornecida aqui como um procedimento de solução de problemas para situações incomuns.
A exclusão manual de entradas não é necessária ao usar o utilitário kdnet. Para obter mais informações, consulte Como configurar a depuração automática do kernel de rede KDNET.
Ao usar bcdedit –deletevalue
, você deve fornecer um nome de elemento bcd válido. Para obter mais informações, consulte BCDEdit/deletevalue.
Para excluir manualmente as entradas bcdedit, conclua as seguintes etapas:
No computador de destino, abra um prompt de comando como administrador.
Como exemplo, insira o seguinte comando para excluir a entrada de depuração BCDEdit para o endereço IP do host:
bcdedit -deletevalue {dbgsettings} hostip
Ao excluir o hostip, você precisa especificar target= na linha de comando do depurador.
Como outro exemplo, exclua a entrada de porta usando o seguinte comando:
bcdedit -deletevalue {dbgsettings} port
Quando você exclui a entrada de porta, o KDNET usa a porta padrão do depurador registrada na ICANN de 5364.
Configurar o Hyper-V
Se você pretende instalar a função Hyper-V no computador de destino, consulte Como configurar a depuração de rede de um host de máquina virtual.
Para obter informações sobre como depurar uma VM (máquina virtual) Hyper-V, consulte Configurando a depuração de rede de uma máquina virtual – KDNET.
Habilitar a KDNET em um host Hyper-V que está executando VMs com conectividade de rede externa
Às vezes, ocorre uma situação que faz com que a rede em VMs pare de funcionar:
Hyper-V foi habilitado no computador, um comutador de rede externo foi criado e é apontado para uma NIC física no computador e as VMs foram configuradas para usar esse comutador externo para sua rede.
O KDNET é então habilitado no sistema operacional host Hyper-V usando a mesma NIC física apontada pelo comutador de rede externo. O host é reinicializado.
Todas as VMs que usaram o comutador externo configurado anteriormente perdem a conectividade de rede após a reinicialização.
Essa interrupção ocorre por padrão e acontecerá porque o KDNET assume o controle exclusivo sobre a NIC que está configurado para usar. O sistema operacional não carrega o miniport NDIS nativo para essa NIC. O comutador de rede externo não pode mais se comunicar com o driver de miniporto NDIS nativo e parar de funcionar. Para contornar essa situação, faça o seguinte:
Abra o Virtual Switch Manager no Hyper-V Manager e selecione o Comutador Virtual existente. Altere a NIC de rede externa para o Adaptador de rede de depuração Kernel da Microsoft selecionando-a no menu suspenso e, em seguida, selecionando OK na caixa de diálogo Gerenciador de Comutador Virtual.
Depois de atualizar a NIC do Comutador Virtual, desligue e reinicie suas VMs.
Quando a depuração do KDNET está desativada, o mesmo procedimento precisa ser seguido para redirecionar o switch externo de volta para a miniporta NDIS nativa da NIC. Caso contrário, a conectividade da VM será perdida quando a máquina for reinicializada após a depuração ser desabilitada.
IPv6
O suporte ao IPv6 foi adicionado no Windows versão 1809.
Para usar o IPv6 com o depurador, conclua as seguintes etapas:
Execute ping no <debughostname> e anote o endereço IPv6 relatado na resposta das linhas de saída. Use este endereço IPv6 no lugar de
x:y:z:p:d:q:r:n
.Use BCDEdit para excluir quaisquer valores de endereço IP existentes em dbgsettings.
bcdedit -deletevalue {dbgsettings} hostip
Defina o endereço IPv6 do host. Não deve haver espaços na cadeia de caracteres
hostipv6=s:t:u:v:w:x:y:z
. <YourPort> é o número da porta de rede a ser usado para este computador de destino. <> YourKey é a chave de segurança de quatro partes. <b.d.f> são os números de localização da função do dispositivo de barramento para a NIC que você deseja usar para o KDNET.bcdedit /dbgsettings net hostipv6:s:t:u:v:w:x:y:z port:<YourPort> key:<YourKey> busparams:<b.d.f>
Digite este comando para confirmar se as dbgsettings estão definidas corretamente.
C:\> bcdedit /dbgsettings busparams 0.25.0 key 2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p debugtype NET hostipv6 2001:db8:0:0:ff00:0:42:8329 port 50010 dhcp Yes The operation completed successfully.
No computador host, use o seguinte comando para iniciar o depurador:
Windbg -k net:port=<yournetworkportnumber>,key=<key_output_from_kdnet>,target=::<YourIPv6Address>
Quando o depurador estiver em execução na máquina host e aguardando conexão, reinicie o computador de destino.
O depurador deve se conectar ao depurador do host no início da inicialização. Você pode ver que a KDNET está usando uma conexão IPv6 porque os endereços IP relatados na mensagem conectada são endereços IPv6 em vez de endereços IPv4.
Anotações
Cada configuração bcd do depurador que permite especificar
hostip
tem um elementohostipv6
correspondente. Há três.IPv4 IPv6 Uso hostip hostipv6 Para inicialização e depuração de kernel targethostip targethostipv6 Específico para depuração de kernel hypervisorhostip hypervisorhostipv6 Para depuração do hyper-v Caso você defina o endereço de estilo
hostipv6
para qualquer um desses tipos de depuração, isso significa que você deseja e obterá o IPv6.Caso você defina o endereço de estilo
hostip
para qualquer um desses tipos de depuração, isso significa que você deseja e obterá o IPv4.O destino será apenas IPv4 ou IPv6, não os dois ao mesmo tempo. A versão do protocolo IP usado é controlada pelos dbgsettings do computador de destino. Se
hostip
estiver definido, o destino usará IPv4. Sehostipv6
estiver definido, o destino usará IPv6.O depurador de host normalmente seleciona automaticamente o uso de IPv4 ou IPv6. Por padrão, o depurador escuta em um soquete IPv4 e em um soquete IPv6 e se conecta automaticamente em qualquer um deles à máquina de destino.
Se você quiser forçar o uso do IPv6 no depurador no host, mas quiser que o depurador ouça uma conexão do destino, adicione
target=::
à linha de comando do depurador.::
é um endereço IPv6 de 0.Se você quiser forçar a depuração de IPv4 no depurador no host, mas quiser que o depurador escute uma conexão do destino, então você poderá adicionar
target=0.0.0.0
à linha de comando do depurador.0.0.0.0
é um endereço IPv4 de 0.Se você especificar
target=
na linha de comando do depurador e usar um nome de computador, o depurador converterá esse nome de computador em um endereço IPv4 e um endereço IPv6. Em seguida, o depurador tenta se conectar em ambos.Quando você especifica
target=
na linha de comando do depurador e usa um endereço IP, se o endereço IP contém qualquer : caracteres, o depurador assume que é um endereço IPv6 e força o uso do IPv6 para essa conexão. Se o endereço IP contiver qualquer . caracteres, o depurador assume que é um endereço IPv4 e força o uso do IPv4 para essa conexão.Se você configurar o IPv6 no destino e forçar o uso do IPv4 na linha de comando do depurador, não obterá uma conexão.
Se você configurar o IPv4 no destino e forçar o uso do IPv6 na linha de comando do depurador, também não obterá uma conexão.