Usar KDbgCtrl
A ferramenta KDbgCtrl (Kernel Debugging Control, kdbgctrl.exe) pode ser usada para controlar a conexão de depuração do kernel a partir do computador de destino.
Para usar essa ferramenta, o computador de destino deve estar executando o Windows Server 2003 ou uma versão posterior do Windows.
O KDbgCtrl pode controlar cinco configurações diferentes: Depuração Completa do Kernel, Depuração Automática do Kernel, Tratamento de Erros no Modo de Usuário, Bloqueio de Depuração do Kernel e o tamanho do buffer DbgPrint.
Para usar o KDbgCtrl, você já deve ter habilitado a depuração do kernel nas configurações de inicialização do computador de destino antes da última inicialização. O KDbgCtrl não pode ser usado para habilitar a depuração do kernel se isso não foi feito. Confira Parâmetros de inicialização para habilitar a depuração para obter detalhes sobre essas configurações de inicialização.
Depuração Completa do Kernel
Quando a opção Depuração Completa do Kernel está habilitada, um depurador de kernel em execução no computador host pode interromper o computador de destino. O computador de destino interromperá o depurador do kernel se uma exceção no modo kernel for atingida. Mensagens do destino para o host, como a saída DbgPrint, mensagens de carregamento de símbolos e depuradores de modo de usuário redirecionados também são permitidos.
Se essa configuração estiver desabilitada, todos os sinais do computador host serão ignorados pelo destino.
A Depuração Completa do Kernel está habilitada por padrão. Para verificar o valor da configuração atual, use kdbgctrl -c. Para desabilitar essa configuração, use kdbgctrl -d. Para habilitar essa configuração, use kdbgctrl -e.
Se você deseja verificar a configuração atual e usá-la para controlar a execução em um arquivo em lote, poderá usar o comando kdbgctrl -cx. Para obter detalhes sobre esse comando, confira Opções de linha de comando KDbgCtrl.
Depuração Automática do Kernel
Se a Depuração Completa do Kernel estiver habilitada, a configuração atual para Depuração Automática do Kernel será imaterial, ou seja, toda a comunicação será permitida.
Quando a Depuração Completa do Kernel está desabilitada e a Depuração Automática do Kernel está habilitada, somente o computador de destino pode iniciar uma conexão de depuração.
Nesse caso, somente uma exceção de modo kernel, ponto de interrupção ou outro evento de modo kernel fará com que uma conexão seja estabelecida. A conexão não será estabelecida para a saída DbgPrint, mensagens de carregamento de símbolos, entrada e saída do depurador de modo de usuário redirecionadas ou outras mensagens semelhantes -- estas serão armazenadas no buffer DbgPrint, em vez de serem enviadas para o depurador do kernel.
Se uma exceção ou um evento fizer com que o destino interrompa o depurador do kernel, a Depuração Completa do Kernel será ativada automaticamente, como se você tivesse executado kdbgctrl -e.
A Depuração Automática do Kernel é desabilitada por padrão (embora isso seja imaterial, a menos que a Depuração Completa do Kernel também esteja desabilitada). Para verificar o valor da configuração atual, use kdbgctrl -ca. Para desabilitar essa configuração, use kdbgctrl -da. Para habilitar essa configuração, use kdbgctrl -ea.
Tratamento de Erros no Modo de Usuário
Quando o Tratamento de Erros no Modo de Usuário estiver habilitado, alguns eventos de modo de usuário farão com que o computador de destino interrompa o depurador do kernel.
Especificamente, todas as interrupções int 3, como pontos de interrupção inseridos no código por um depurador ou chamadas para DbgBreakPoint, causarão uma interrupção no depurador do kernel. No entanto, exceções padrão, como violações de acesso e divisão por zero, geralmente não serão enviadas ao depurador do kernel.
Se um depurador de modo de usuário já estiver anexado ao processo, esse depurador capturará todos os erros de modo de usuário e o depurador de kernel não será alterado. Para obter a classificação de precedência dos vários manipuladores de erros de modo de usuário, confira Habilitar a depuração post-mortem.
Para que o Tratamento de Erros no Modo de Usuário funcione, a Depuração Completa do Kernel ou a Depuração Automática do Kernel também devem estar habilitadas.
O Tratamento de Erros no Modo de Usuário está habilitado por padrão. Para verificar o valor da configuração atual, use kdbgctrl -cu. Para desabilitar essa configuração, use kdbgctrl -du. Para habilitar essa configuração, use kdbgctrl -eu.
Bloqueio de Depuração do Kernel
Em alguns casos, convém configurar o computador de destino para depuração do kernel, mas aguarde para habilitar essa depuração até que o computador de destino seja iniciado. Você pode fazer isso bloqueando a depuração do kernel.
Importante
Antes de usar o BCDEdit para alterar as informações de inicialização, talvez você precise suspender de forma temporária os recursos de segurança do Windows, como o BitLocker e a Inicialização Segura, no computador de teste. Reabilite esses recursos de segurança quando o teste terminar e gerencie adequadamente o PC de teste, quando os recursos de segurança estiverem desabilitados.
Para bloquear a depuração do kernel, configure o computador de destino usando comandos similares aos seguintes:
bcdedit /debug on
bcdedit /dbgsettings 1394 channel:32 /start DISABLE /noumex
Quando você reiniciar o computador de destino, ele estará preparado para depuração do kernel, mas a depuração do kernel e o Tratamento de Erros no Modo Usuário serão desabilitados. Nesse ponto, um computador host não poderá se conectar ao computador de destino, as verificações de bugs não serão detectadas pelo depurador do kernel e as exceções no modo de usuário não causarão uma interrupção no depurador do kernel.
Quando estiver pronto, você poderá habilitar a depuração do kernel (sem reiniciar o computador de destino) inserindo os comandos a seguir.
kdbgctrl -db
kdbgctrl -e
Posteriormente, você poderá desabilitar a depuração do kernel inserindo os comandos a seguir.
kdbgctrl -d
kdbgctrl -eb
Você pode usar kdbgctrl -cb para verificar se a depuração do kernel está bloqueada.
Tamanho do Buffer DbgPrint
O buffer DbgPrint armazena mensagens que o computador de destino enviou ao depurador do kernel.
Se Depuração Completa do Kernel estiver habilitada, essas mensagens serão exibidas automaticamente no depurador do kernel. Mas, se essa opção estiver desabilitada, essas mensagens serão armazenadas no buffer. Posteriormente, você pode habilitar a depuração do kernel, conectar-se a um depurador do kernel e usar a extensão !dbgprint para ver o conteúdo desse buffer. Para obter mais informações sobre esse buffer, confira O buffer DbgPrint.
O tamanho padrão do buffer DbgPrint é 4 KB em uma compilação gratuita do Windows. Para determinar o tamanho atual do buffer, use kdbgctrl -cdb. Para alterar o tamanho do buffer, use kdbgctrl -sdbSize, em que Size especifica o novo tamanho do buffer. Para obter detalhes da sintaxe, confira Opções de linha de comando KDbgCtrl.
Exemplos
Para exibir todas as configurações atuais, use o seguinte comando:
kdbgctrl -c -ca -cu -cb -cdb
Para restaurar as configurações padrão, use o seguinte comando:
kdbgctrl -e -da -eu -db -sdb 0x1000
Para bloquear o computador host para que ele só seja contatado em exceções, use o seguinte comando:
kdbgctrl -d -ea -eu
Para desabilitar toda a depuração do kernel, use o seguinte comando:
kdbgctrl -d -da
Se você estiver desabilitando toda a depuração do kernel, também poderá querer aumentar o tamanho do buffer DbgPrint. Isso garante que todas as mensagens serão salvas caso você precise vê-las posteriormente. Se você tiver um megabyte de memória de reserva, poderá usar o seguinte comando:
kdbgctrl -sdb 0x100000