O que é uma “exceção de primeira chance”?

103

O que exatamente é uma exceção de primeira chance? Como e onde ele se origina em um programa .NET? E por que é chamado por esse nome peculiar (de que 'acaso' estamos falando)?

Frederico, o Louco
fonte

Respostas:

78

É um conceito de depuração. Basicamente, as exceções são lançadas primeiro para o depurador e, em seguida, para o programa real onde, se não for manipulado, será lançado para o depurador uma segunda vez, dando a você a chance de fazer algo com ele em seu IDE antes e depois do próprio aplicativo. Isso parece ser uma invenção do Microsoft Visual Studio.

Annakata
fonte
21
É mais do que um conceito de depuração; C # não fornece um meio conveniente de observar o tratamento de exceção de duas passagens em tempo de execução, mas o vb.net fornece. Basicamente, quando uma exceção é lançada, o tempo de execução começa pesquisando a pilha de chamadas para descobrir quem, se alguém, vai pegá-la. Esse processo ocorre antes dafinally execução de qualquer bloco. Uma vez que o sistema decidiu quem irá capturar uma exceção (e determinou que alguém realmente irá), o sistema começará a desfazer a pilha. Observe que se uma exceção for lançada de um finallybloco ...
supercat
18
... o código que esperava capturar a exceção original pode acabar não fazendo isso; existem muitos casos estranhos.
supercat
5
Isso acontece quando você configurou o depurador para quebrar em todas as exceções lançadas (não apenas exceções não tratadas), ou se você "entrar" em alguma instrução que lança. Você verá a mensagem Uma exceção de primeira chance do tipo 'foo' ocorreu em YourApp.exe . Você ainda pode continuar (F5) ou avançar (F11). Então, se houver um catchpara isso, o controle vai para lá. Se não houver catchbloqueio, você obterá a quebra de "segunda chance", desta vez a mensagem é Ocorreu uma exceção não tratada do tipo 'foo' em YourApp.exe . A partir daqui, tentar continuar ou avançar não terá sucesso.
Jeppe Stig Nielsen
@supercat: Como faço para saber mais sobre os detalhes como você mencionou em seus comentários acima? É resultado de autoexperimentação? lendo livros (qual)? Essa é uma visão muito impressionante! Eu agradeceria se você pudesse responder, por favor ...
anish
2
@NoSaidTheCompiler: Eu li sobre tratamento de exceções em vários blogs; Eu esperaria que uma pesquisa por "exception filter .net" mostrasse alguns blogs sobre o assunto.
supercat de
4

Acabei de começar a usar o depurador e me deparei com isso. Em minha pesquisa, encontrei a postagem no blog do MSDN O que é uma exceção de primeira chance? isso esclareceu tudo para mim.

A grande lição da postagem do blog para mim é que ela se refere à notificação ao depurador, e não a algo que meu código necessariamente precisaria tratar, e o mais importante, "Mensagens de exceção de primeira chance na maioria das vezes não significam que há um problema no código."

codingatty
fonte
Por favor, coloque um trecho ( não o artigo inteiro ) do que você achou útil nesse link. Havia uma resposta anterior apenas para o link com o mesmo link que foi excluído.
Mark Hall
A grande lição para mim é que isso se refere à notificação ao depurador, e não a algo que meu código necessariamente precisaria lidar, e o mais importante, "Mensagens de exceção de primeira chance na maioria das vezes não significam que há um problema no código."
codingatty de
Acrescentei seu comentário à sua resposta, sinto que o link é importante o suficiente para mantê-lo por perto, estou tentando ter certeza de que não será considerada uma resposta apenas de link como da vez anterior que foi dada.
Mark Hall
0

Quando um aplicativo está sendo depurado, o depurador é notificado sempre que uma exceção é encontrada. Nesse ponto, o aplicativo é suspenso e o depurador decide como tratar a exceção. A primeira passagem por esse mecanismo é chamada de exceção de "primeira chance".

Dependendo da configuração do depurador, ele retomará o aplicativo e passará a exceção ou deixará o aplicativo suspenso e entrará no modo de depuração. Se o aplicativo manipular a exceção, ele continuará a ser executado normalmente.

Mensagens de exceção de primeira chance geralmente não significam que há um problema no código. Para aplicativos / componentes que tratam exceções normalmente, as mensagens de exceção de primeira chance permitem ao desenvolvedor saber que uma situação excepcional foi encontrada e tratada.

David
fonte
0

Do ponto de vista do desenvolvedor, é mais uma exceção de segunda chance, porque significaria que não foi tratada no código ; portanto, o aplicativo iria parar.

A primeira chance pode ser muitas delas, mas aquelas com mais preocupações, novamente, de uma perspectiva de desenvolvimento, são a segunda chance, porque isso levaria a um travamento do aplicativo.

Agustín Garzon
fonte