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