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:
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.
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)
.
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.
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 promptkd>
.
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.