Partilhar via


Combinando este método com depuração remota

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

Importante

Há considerações de segurança adicionais importantes ao usar a depuração remota, para obter mais informações, incluindo informações sobre como habilitar o modo seguro, consulte Segurança durante a depuração remota e Considerações de segurança para ferramentas de depuração do Windows.

Por exemplo, essa configuração é útil quando seus 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 do 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.

Nota Ao descrever este cenário, aplicativo de destino refere-se ao aplicativo de modo de utilizador que está a ser depurado, computador de destino refere-se ao computador que contém o aplicativo de destino e o processo CDB ou NTSD, e computador host refere-se ao computador que contém o depurador do kernel.

Para usar essa técnica, você deve fazer 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 
    

    Ou, você pode iniciar um novo processo como o destino usando a sintaxe a seguir.

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

    Se você estiver instalando isso como um depurador postmortem, você usaria a sintaxe a seguir. Nota que é necessário editar manualmente o registro do sistema para instalar um depurador postmortem que inclua o parâmetro -server; para obter detalhes, consulte Ativando a depuração Postmortem.

    ntsd -server ServerTransport -ddefer [-y UserSymbolPath] 
    

    Para obter informações sobre as opções de transporte disponíveis, consulte Ativando um Servidor de Depuração.

  2. Inicie o WinDbg ou KD no computador host, como se você fosse depurar o computador de destino, mas não invada o computador de destino. Para usar o WinDbg, utilize a sintaxe seguinte.

    windbg [-y KernelSymbolPath] [-k ConnectionOptions] 
    

    Para obter mais informações sobre esta etapa, consulte Live Kernel-Mode Debugging Using WinDbg (Classic)

    .

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

    cdb -remote ClientTransport 
    

    Para obter mais informações sobre esta etapa, consulte Ativar um Cliente de Depuração.

  4. Quando os depuradores estiverem em execução e o prompt Input> aparecer no depurador do kernel, use o comando .sleep (Pause Debugger) para pausar os depuradores e deixar o computador de destino executar 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 utilizar o CDB como depurador de modo utilizador, a janela da linha de comandos associada ao CDB permanecerá bloqueada e indisponível enquanto a depuração continuar. Se você usar NTSD, nenhuma janela adicional será criada, mesmo que NTSD tenha uma ID de processo associada a ela no computador de destino.

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

  • Há dois modos diferentes de depuração no 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 é chamado depuração de modo de usuário controlada remotamente. Quando o depurador de modo kernel é acionado no computador de destino e o prompt de Input> é exibido, o depurador de modo de utilizador é controlado pelo depurador do kernel; isto é conhecido como depuração de modo de utilizador controlada pelo kernel.

  • Estes dois modos nunca estão disponíveis ao mesmo tempo. Quando o depurador do kernel é interrompido 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, assim o depurador de modo de usuário não poderá receber entrada remota através desta 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 exijam acesso ao símbolo deverão ser emitidos enquanto estiverem no modo de depuração do modo de usuário controlado remotamente.

  • Para alternar da depuração do modo de utilizador controlada pelo kernel para a depuração do modo de utilizador controlada remotamente, use o comando .sleep (Pause Debugger). Quando o depurador em modo de utilizador despertar do comando de suspensão, estará no modo de depuração controlado remotamente em modo de utilizador.

  • Para alternar da depuração no modo de utilizador remotamente controlada para a depuração no modo núcleo, insira qualquer comando no prompt Input>. Se esse prompt não estiver visível, alterne para depuração no modo kernel e depois use o comando g (Go) no prompt kd>.

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