Compartilhar via


Combinar esse método com depuração remota

Às vezes, é útil controlar o depurador de modo de usuário do depurador de kernel e usar o depurador de modo de usuário como um servidor de depuração ao mesmo tempo.

Por exemplo, essa configuração é útil quando os símbolos de modo de usuário estão localizados em um servidor de símbolos. Na configuração padrão para controlar o depurador de modo de usuário de um depurador de kernel, a interação dos dois depuradores pode levar a pequenos lapsos na sincronização, e esses lapsos podem impedir a autenticação do servidor de símbolos. A configuração mais complexa descrita aqui pode evitar esse problema.

Observação Ao descrever esse cenário, o aplicativo de destino refere-se ao aplicativo de modo de usuário que está sendo depurado, o computador de destino refere-se ao computador que contém o aplicativo de destino e o processo CDB ou NTSD, e o computador host refere-se ao computador que contém o depurador de kernel.

Para usar essa técnica, você faça o seguinte:

  1. Inicie NTSD ou CDB no computador de destino, com as opções de linha de comando -ddefer e -server, especificando as opções de transporte desejadas. A opção -server deve ser o primeiro parâmetro na linha de comando.

    Por exemplo, você pode anexar a um processo em execução usando a sintaxe a seguir.

    ntsd -server ServerTransport -ddefer [-y UserSymbolPath] -p PID 
    

    Você também pode iniciar um novo processo como o destino usando a sintaxe a seguir.

    ntsd -server ServerTransport -ddefer [-y UserSymbolPath] ApplicationName 
    

    Se ele estiver sendo instalado como um depurador análise posterior, use a sintaxe a seguir. Você deve editar manualmente o registro para instalar um depurador de análise posterior que inclui o parâmetro -server. Para obter detalhes, consulte Habilitar a depuração de análise posterior.

    ntsd -server ServerTransport -ddefer [-y UserSymbolPath] 
    

    Para obter informações sobre as opções de transporte disponíveis, consulte Ativar um servidor de depuração.

  2. Inicie o WinDbg ou KD no computador host, como se fosse depurar o computador de destino, mas não acesse o computador de destino. Para usar o WinDbg, use a sintaxe a seguir.

    windbg [-y KernelSymbolPath] [-k ConnectionOptions] 
    

    Para obter mais informações sobre essa etapa, consulte Depuração no modo kernel ao vivo usando WinDbg (clássico)

    .

  3. Inicie o WinDbg ou CDB como um cliente de depuração, com as mesmas opções de transporte usadas para iniciar o servidor. Esse cliente de depuração pode ser executado no computador host ou em um terceiro computador.

    cdb -remote ClientTransport 
    

    Para obter mais informações sobre essa etapa, consulte Ativar um cliente de depuração.

  4. Quando os depuradores estiverem em execução e o Input> prompt aparecer no depurador de kernel, use o comando .sleep (Pausar depurador) para pausar os depuradores e deixar o computador de destino funcionar por alguns segundos. Isso dá ao computador de destino tempo para processar o protocolo de transporte remoto, estabelecendo a conexão entre o servidor remoto de modo de usuário e o cliente remoto.

Se você usar o CDB como o depurador de modo de usuário, a janela do Prompt de Comando associada ao CDB permanecerá bloqueada e indisponível enquanto a depuração continuar. Se você usar NTSD, nenhuma janela adicional será criada, mesmo que o NTSD tenha uma ID de processo associada a ele no computador de destino.

Os quatro modos e os métodos de alternância entre eles descritos no tópico Modos de alternância se aplicam a esse cenário de combinação, com as seguintes diferenças:

  • Há dois modos de depuração de modo de usuário. Quando o computador de destino está em execução, o servidor de depuração é controlado pelo cliente de depuração como em qualquer outra sessão de depuração remota. Isso se chama depuração de modo de usuário controlada remotamente. Quando o depurador de modo de kernel é inserido no computador de destino e o prompt Input> é exibido, o depurador de modo de usuário é controlado pelo depurador de kernel. Isso se chama depuração de modo de usuário controlado pelo kernel.

  • Esses dois modos nunca estão disponíveis ao mesmo tempo. Quando o depurador de kernel é inserido no computador de destino, mesmo que o depurador de modo de usuário esteja ativo, o computador de destino não consegue processar o protocolo de transporte remoto e, portanto, o depurador de modo de usuário não pode receber a entrada remota por meio dessa conexão.

  • Se os símbolos do modo de usuário estiverem localizados em um servidor de símbolos, todos os comandos do depurador que exigem acesso a símbolos deverão ser emitidos enquanto estiverem no modo de depuração de modo de usuário controlado remotamente.

  • Para alternar da depuração de modo de usuário controlada pelo kernel para a depuração de modo de usuário controlada remotamente, use o comando .sleep (Pausar depurador). Quando o depurador de modo de usuário for ativado do comando sleep, ele estará no modo de depuração de modo de usuário controlado remotamente.

  • Para alternar da depuração no modo de usuário controlado remotamente para a depuração no modo kernel, insira qualquer comando no prompt Input>. Se esse prompt não estiver visível, alterne para depuração no modo kernel e use o comando g (Ir) no prompt kd>.

Internamente, um depurador de modo de usuário iniciado com -ddefer dá a primeira prioridade à entrada do cliente de depuração e a segunda prioridade à entrada do depurador do kernel. No entanto, nunca pode haver um conflito entre entradas simultâneas, pois quando o depurador do kernel acessa o computador de destino, a conexão remota não está disponível.