Partilhar via


Acessando o depurador

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

User-Mode Quebrar rotinas

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 entrar num depurador a partir de um programa em modo de utilizador, use a função DebugBreak. O 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á invadido pelo 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 de modo kernel foi ativada no momento da inicialização, todo o computador invadirá o depurador do kernel. Se um depurador do kernel não estiver ligado, o computador irá congelar e ficará a aguardar um depurador do kernel.

  3. Se um depurador em modo de utilizador não estiver anexado e a depuração em modo kernel estiver desativada, o programa será encerrado com uma exceção não tratada e o depurador post-mortem (just-in-time) será ativado. Para obter mais informações, consulte Ativação da Depuração Postmortem.

Kernel-Mode Quebrar rotinas

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

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

A rotina DbgBreakPointWithStatus também causa uma quebra, 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 compilação verificado. Quando compilados no ambiente de compilação livre, eles não têm efeito.

Kernel-Mode Rotinas de Pausa Condicional

Duas rotinas de quebra condicional estão disponíveis para o código do modo kernel. Estas rotinas testam uma expressão lógica. Se a expressão for falsa, a execução será interrompida e o depurador torna-se ativo.

  • A macro ASSERT testa uma expressão lógica. Se a expressão for falsa, a execução será interrompida e o depurador ficará ativo. A expressão com falha e sua localização no programa são exibidas 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 compilação verificado. Quando compilados no ambiente de compilação livre, eles não têm efeito.