Qu'est-ce qu'une «exception de la première chance»?

103

Qu'est-ce qu'une exception de première chance exactement? Comment et d'où vient-il dans un programme .NET? Et pourquoi est-il appelé par ce nom particulier (de quelle «chance» parlons-nous)?

Frédéric le fou
la source

Réponses:

78

C'est un concept de débogage. Fondamentalement , les exceptions sont jetés au débogueur d' abord , puis le programme réel où s'il n'est pas traitée , il est jeté au débogueur une deuxième fois, vous donnant une chance de faire quelque chose avec elle dans votre IDE avant et après l'application elle - même. Cela semble être une invention de Microsoft Visual Studio.

Annakata
la source
21
C'est plus qu'un concept de débogage; C # ne fournit pas un moyen pratique d'observer la gestion des exceptions en deux passes au moment de l'exécution, contrairement à vb.net. Fondamentalement, lorsqu'une exception est levée, l'exécution commence par rechercher dans la pile d'appels pour savoir qui, si quelqu'un va l'attraper. Ce processus a lieu avant l' finallyexécution de tout bloc. Une fois que le système a décidé qui va intercepter une exception (et déterminé que quelqu'un va réellement), le système commencera à dérouler la pile. Notez que si une exception est lancée à partir d'un finallybloc ...
supercat
18
... le code qui s'attendait à intercepter l'exception d'origine peut finir par ne pas le faire; il y a beaucoup de cas de coin étranges.
supercat
5
Cela se produit lorsque vous avez configuré le débogueur pour interrompre toutes les exceptions levées (pas seulement les exceptions non gérées), ou si vous «entrez» dans une instruction qui déclenche. Vous voyez le message Une exception de première chance de type «foo» s'est produite dans YourApp.exe . Vous pouvez continuer (F5) ou aller plus loin (F11). Ensuite, s'il y a un catchpour cela, le contrôle y va. S'il n'y a pas de catchblocage, vous obtenez la coupure de «seconde chance», cette fois le message est Une exception non gérée de type «foo» s'est produite dans YourApp.exe . À partir de là, essayer de continuer ou d'aller plus loin ne réussira pas.
Jeppe Stig Nielsen
@supercat: Comment puis-je connaître les détails comme vous l'avez mentionné dans vos commentaires ci-dessus? Est-ce le résultat d'une auto-expérimentation? lire des livres (lequel)? C'est un aperçu très impressionnant! Je vous serais reconnaissant si vous pouviez prendre un moment pour répondre à ceci s'il vous plaît ...
anish
2
@NoSaidTheCompiler: J'ai lu sur la gestion des exceptions dans divers blogs; Je m'attendrais à ce qu'une recherche sur "exception filter .net" fasse apparaître certains blogs sur le sujet.
supercat
4

Je viens de commencer à utiliser le débogueur et je suis tombé sur ceci. Dans mes recherches, j'ai trouvé le billet de blog MSDN Qu'est-ce qu'une exception de première chance? cela m'a éclairci.

Ce que je retiens du blog, c'est qu'il fait référence à la notification au débogueur, et non à quelque chose que mon code aurait nécessairement besoin de gérer, et surtout, "Les messages d'exception de première chance ne signifient le plus souvent pas qu'il y a un problème dans le code."

codant
la source
Veuillez mettre un extrait ( pas tout l'article ) de ce que vous avez trouvé utile à partir de ce lien. Il y avait une réponse de lien antérieur uniquement avec ce même lien qui a été supprimé.
Mark Hall
Ce qu'il faut retenir pour moi, c'est qu'il fait référence à la notification au débogueur, et non à quelque chose que mon code aurait nécessairement besoin de gérer, et surtout, "Les messages d'exception de première chance ne signifient le plus souvent pas qu'il y a un problème dans le code."
codingatty
J'ai ajouté votre commentaire à votre réponse, je pense que le lien est suffisamment important pour être conservé, j'essaie de m'assurer qu'il ne sera pas considéré comme une réponse de lien uniquement comme la fois précédente.
Mark Hall
0

Lorsqu'une application est en cours de débogage, le débogueur est notifié chaque fois qu'une exception est rencontrée. À ce stade, l'application est suspendue et le débogueur décide comment gérer l'exception. Le premier passage à travers ce mécanisme est appelé une exception de «première chance».

En fonction de la configuration du débogueur, il reprendra l'application et transmettra l'exception ou laissera l'application suspendue et entrera en mode débogage. Si l'application gère l'exception, elle continue de s'exécuter normalement.

Le plus souvent, les messages d'exception de première chance ne signifient pas qu'il y a un problème dans le code. Pour les applications / composants qui gèrent correctement les exceptions, les messages d'exception de première chance indiquent au développeur qu'une situation exceptionnelle a été rencontrée et a été gérée.

David
la source
0

Du point de vue d'un développeur, il s'agit plus d'une exception de seconde chance, car cela signifierait qu'elle n'a pas été gérée dans le code ; l'application s'arrêterait donc.

La première chance pourrait être beaucoup d'entre elles, mais celles dont il faut se préoccuper davantage, encore une fois, du point de vue du développement, sont la deuxième chance, car cela entraînerait un plantage de l'application.

Agustin Garzon
la source