Partilhar via


Entrando no depurador

O modo de usuário e o código do modo kernel usam rotinas diferentes para invadir o depurador.

User-Mode rotinas de interrupção

Uma rotina de interrupção faz com que uma exceção ocorra no processo atual, para que o thread de chamada possa sinalizar o depurador associado ao processo de chamada.

Para invadir um depurador de um programa de modo de usuário, use a função DebugBreak. Seu protótipo é o seguinte:

VOID DebugBreak(VOID);

Quando um programa de modo de usuário chama DebugBreak, as seguintes ações possíveis ocorrerão:

  1. Se um depurador de modo de usuário estiver anexado, o programa será dividido no depurador. Isso significa que o programa será pausado e o depurador ficará ativo.

  2. Se um depurador de modo de usuário não estiver anexado, mas a depuração do modo kernel tiver sido habilitada no momento da inicialização, todo o computador será dividido no depurador de kernel. Se um depurador de kernel não estiver anexado, o computador congelará e aguardará um depurador de kernel.

  3. Se um depurador de modo de usuário não estiver anexado e a depuração do modo kernel não estiver habilitada, o programa terminará com uma exceção sem tratamento e o depurador post-mortem (just-in-time) será ativado. Para obter mais informações, consulte Habilitando a depuração pós-morte.

Kernel-Mode rotinas de interrupção

Quando um programa de modo kernel é dividido no depurador, todo o sistema operacional congela até que o depurador de kernel permita que a execução seja retomada. Se nenhum depurador de kernel estiver presente, isso será tratado como um bug marcar.

A rotina DbgBreakPoint funciona no código do modo kernel, mas, de outra forma, é semelhante à rotina de modo de usuário DebugBreak .

A rotina DbgBreakPointWithStatus também causa uma interrupção, mas também envia um código de status de 32 bits para o depurador.

As rotinas KdBreakPoint e KdBreakPointWithStatus são idênticas a DbgBreakPoint e DbgBreakPointWithStatus, respectivamente, quando compiladas no ambiente de build verificado. Quando compilados no ambiente de build gratuito, eles não têm efeito.

Kernel-Mode rotinas de interrupção condicional

Duas rotinas de interrupção condicional estão disponíveis para o código do modo kernel. Essas rotinas testam uma expressão lógica. Se a expressão for false, a execução será interrompida e o depurador ficará ativo.

  • A macro ASSERT testa uma expressão lógica. Se a expressão for false, a execução será interrompida e o depurador ficará ativo. A expressão com falha e seu local no programa são exibidos no depurador.

  • A macro ASSERTMSG é idêntica a ASSERT , exceto que permite que uma mensagem adicional seja enviada ao depurador.

ASSERT e ASSERTMSG só estão ativos quando compilados no ambiente de build verificado. Quando compilados no ambiente de build gratuito, eles não têm efeito.