Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
KD e WinDbg no modo kernel suportam a depuração de múltiplos processadores. Você pode executar esse tipo de depuração em qualquer plataforma multiprocessador.
Os processadores são numerados de zero a n.
Se o processador atual for o processador 0 (ou seja, se for o processador que atualmente causou a ativação do depurador), você poderá examinar os outros processadores não atuais (processadores um a n). No entanto, você não pode alterar nada nos processadores não atuais. Você só pode visualizar o estado deles.
Selecionando um processador
Você pode usar o comando .echocpunum (Mostrar Número da CPU) para exibir os números de processador do processador atual. A saída desse comando permite que você identifique imediatamente quando está trabalhando em um sistema de vários processadores pelo texto no prompt de depuração do kernel.
No exemplo a seguir, 0: antes do prompt kd> indica que você está depurando o primeiro processador do computador.
0: kd>
Use o comando ~s (Alterar Processador Atual) para alternar entre processadores, como mostra o exemplo a seguir.
0: kd> ~1s
1: kd>
Agora você está depurando o segundo processador no computador.
Talvez seja necessário alterar os processadores em um sistema multiprocessador se encontrar uma interrupção e não conseguir entender o rastreamento de pilha. A interrupção pode ter ocorrido em um processador diferente.
Especificando processadores em outros comandos
Você pode adicionar um número de processador antes de vários comandos. Esse número não é precedido por um til (~), exceto no comando ~S.
Nota Na depuração no modo de usuário, o til é usado para especificar threads. Para obter mais informações sobre essa sintaxe, consulte a Sintaxe do Thread.
As IDs do processador não precisam ser referenciadas explicitamente. Em vez disso, você pode usar uma expressão numérica que é resolvida para um inteiro que corresponde a uma ID do processador. Para indicar que a expressão deve ser interpretada como um processador, use a sintaxe a seguir.
||[Expression]
Nessa sintaxe, os colchetes são necessários e a Expressão significa qualquer expressão numérica que seja resolvida para um inteiro que corresponda a uma ID do processador.
No exemplo a seguir, o processador muda dependendo do valor de um pseudo-registro definido pelo usuário.
||[@$t0]
exemplos de
O exemplo a seguir usa o comando k (Display Stack Backtrace) para exibir um rastreamento de pilha do segundo processador.
1: kd> 2k
O exemplo a seguir usa o comando r (Registers) para exibir o registro eax do processador três.
1: kd> 3r eax
No entanto, o comando a seguir fornece um erro de sintaxe, pois você não pode alterar o estado de um processador diferente do processador atual.
1: kd> 3r eax=808080
Pontos de interrupção
Durante a depuração do kernel, os comandos bp, bu, bm (Set Breakpoint) e ba (Break on Access) se aplicam a todos os processadores de um computador com vários processadores.
Por exemplo, se o processador atual for três, você poderá inserir o comando a seguir para colocar um ponto de interrupção em SomeAddress.
1: kd> bp SomeAddress
Em seguida, qualquer processador (não apenas um processador) executado nesse endereço causa uma armadilha de ponto de interrupção.
Exibindo informações do processador
Você pode usar a extensão !running para exibir o status de cada processador no computador de destino. Para cada processador, !running também pode exibir o campo de thread atual e o próximo do PRCB (bloco de controle de processo), o estado dos 16 spinlocks enfileirados internos e um rastreio de pilha.
Você pode usar as extensões !cpuinfo e !cpuid para exibir informações sobre os próprios processadores.