ID do artigo: 173652 - Última revisão: terça-feira, 21 de novembro de 2006 - Revisão: 4.4 Erro: Filtro de exceção sem tratamento não chamado dentro de depurador
Nesta páginaSintomasProcessos de Win32 podem instalar uma função de filtro de exceção sem tratamento para capturar exceções que não são tratadas em um __try / __except bloco em todo o processo. Quando estiver depurando um processo, você encontrar o que o filtro de exceção não tratada nunca é executado, mesmo quando você colocar um ponto de interrupção dentro dele. No entanto, quando o processo não está sendo depurado, seu filtro de exceção sem tratamento é chamado conforme o esperado. CausaQuando chamado de um processo que está sendo depurado, a função de API do Win32 UnhandledExceptionFilter() não chama o filtro de exceção não tratada aplicativo instalado. Observação A API UnhandledExceptionFilter() determina se o processo está sendo depurado. Se o processo está sendo depurado, a API UnhandledExceptionFilter passa a exceção para o depurador. Em seguida, a API UnhandledExceptionFilter chama o filtro de exceção sem tratamento para o processo. ResoluçãoUnhandledExceptionFilter deve chamar o filtro de exceção não tratada aplicativo instalado para processos que estão sendo depurados em adição aos que não sendo depurado. Uma maneira para depurar uma função de filtro de exceção sem tratamento é colocar um __try / __except bloco ao redor de todo o código dentro do main() ou WinMain() funciona da seguinte maneira: Se não desejar adicionar novo __try __except blocos para depurar um filtro de exceção não tratada, você deve usar outros métodos, como assert, rastrear saídas e depuração de código para validar o comportamento do manipulador de exceção. SituaçãoA Microsoft confirmou este é um bug em produtos Microsoft listados no começo deste artigo. Nós estiver pesquisando esse bug e irá postar novas informações aqui na Base de dados de Conhecimento da Microsoft como ele se torna disponível. Mais InformaçõesA finalidade de uma função de filtro de exceção não tratada é dar um processo a oportunidade de responder a exceções que ocorrem fora qualquer __try / __except bloco. Filtros de exceção sem tratamento são todo o processo; se qualquer thread faz com que uma exceção, mas não a processa, o filtro de exceção não tratada será chamado. Quando chamado, a função de filtro pode corrigir a causa da exceção e continuar a execução ou ele pode passar o erro para o manipulador de exceção não tratada padrão, que finaliza o processo. Aplicativos Win32 podem instalar um filtro de exceção não tratada todo o processo com a função de API SetUnhandledExceptionFilter(). O código de inicialização da biblioteca de Microsoft Visual C++ C Runtime (CRT) implementa um __try / __except bloco ao redor a função main(). Quando uma exceção é detectada por este bloco, sua função de filtro de exceção, chamada _XcptFilter, é chamada. _XcptFilter faz duas coisas: ele mapeia as exceções Win32 para sinais usados pela função signal() CRT e despacha sinais para seus manipuladores de eventos apropriados. Se manipulador de um sinal de é definida como SIG_DFL (assim como acontece por padrão), _XcptFilter chama a API UnhandledExceptionFilter(). A API UnhandledExceptionFilter() determina se o processo está sendo depurado. Se for, em seguida, UnhandledExceptionFilter passa a exceção primeiro para o depurador e, em seguida, deve chamar filtro de exceção sem tratamento do processo. Se o processo não estiver sendo depurado, UnhandledExceptionFilter chama filtro de exceção sem tratamento do processo. Dependendo da função de filtro retorno UnhandledExceptionFilter ou continua a execução no momento da exceção, ou exibe uma caixa de diálogo modal sistema informando ao usuário que o aplicativo deve ser encerrada devido a uma exceção não tratada. Etapas para reproduzir o problemaCompilar o código de exemplo a seguir e, em seguida, defina um ponto de interrupção dentro MyUnFilter. Observe que o ponto de interrupção nunca é atingido.A informação contida neste artigo aplica-se a:
Tradução automáticaIMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado. Clique aqui para ver a versão em Inglês deste artigo: 173652
(http://support.microsoft.com/kb/173652/en-us/
)
| Outros Recursos Outros Sites de Suporte
ComunidadesTraduções deste artigo |






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


Voltar para o início