Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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:
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.
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.
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.