IDebugStackFrame3::InterceptCurrentException
Chamado pelo depurador no quadro de pilha atual quando ele deseja interceptar a exceção atual.
Sintaxe
Parâmetros
dwFlags
[em] Especifica ações diferentes. Atualmente, apenas o valor IEA_INTERCEPT
INTERCEPT_EXCEPTION_ACTION é suportado e deve ser especificado.
pqwCookie
[saiu] Valor exclusivo que identifica uma exceção específica.
Valor de retorno
Se for bem-sucedido, retorna S_OK; caso contrário, retornará um código de erro.
A seguir estão os retornos de erro mais comuns.
Erro | Descrição |
---|---|
E_EXCEPTION_CANNOT_BE_INTERCEPTED |
A exceção atual não pode ser interceptada. |
E_EXCEPTION_CANNOT_UNWIND_ABOVE_CALLBACK |
O quadro de execução atual ainda não foi pesquisado por um manipulador. |
E_INTERCEPT_CURRENT_EXCEPTION_NOT_SUPPORTED |
Este método não é suportado para este quadro. |
Comentários
Quando uma exceção é lançada, o depurador ganha controle do tempo de execução em pontos-chave durante o processo de manipulação de exceções. Durante esses momentos-chave, o depurador pode perguntar ao quadro de pilha atual se o quadro deseja interceptar a exceção. Dessa forma, uma exceção interceptada é essencialmente um manipulador de exceção em tempo real para um quadro de pilha, mesmo que esse quadro de pilha não tenha um manipulador de exceção (por exemplo, um bloco try/catch no código do programa).
Quando o depurador deseja saber se a exceção deve ser interceptada, ele chama esse método no objeto de quadro de pilha atual. Esse método é responsável por lidar com todos os detalhes da exceção. Se a interface IDebugStackFrame3 não for implementada ou o método retornar qualquer erro, o InterceptStackException
depurador continuará processando a exceção normalmente.
Observação
As exceções podem ser interceptadas somente em código gerenciado, ou seja, quando o programa que está sendo depurado está sendo executado sob o tempo de execução do .NET. É claro que implementadores de linguagem de terceiros podem implementar InterceptStackException
em seus próprios mecanismos de depuração, se assim desejarem.
Depois que a interceptação for concluída, um IDebugInterceptExceptionCompleteEvent2 será sinalizado.