8 votes

Existe-t-il un moyen d'enregistrer ou d'intercepter les exceptions de la première chance ?

En dehors de l'utilisation d'un profileur, existe-t-il un moyen, à l'intérieur d'un programme en cours d'exécution, de détecter les exceptions de première chance ? Idéalement, j'aimerais enregistrer des informations d'état plus détaillées qui ne sont pas disponibles une fois que le bloc catch a pris en charge l'exception finale.

19voto

jlnorsworthy Points 2406

Je cherchais sur Google FirstChanceException, et je ne peux pas résister à l'envie de répondre à cette question plus de deux ans après...

Désormais, dans .net 4.0, il est possible d'utiliser la fonction Événement FirstChanceException de l'AppDomain. Il s'agit d'un événement uniquement, vous ne pouvez donc pas gérer l'erreur, mais cela semble être un bon moyen central d'obtenir des informations sur les exceptions, qu'elles soient gérées ou non. L'événement FirstChanceException est lancé avant qu'un bloc catch ne soit autorisé à le gérer. Je n'ai pas trouvé beaucoup d'informations à ce sujet, mais à part la documentation de Microsoft, l'une des meilleures sources est Blog de Mitch Sellers .

2voto

Garo Yeriazarian Points 2189

Je pense que la seule façon d'obtenir ces informations en .NET est d'utiliser un débogueur.

Sinon, vous devrez développer vous-même une solution pour sauvegarder l'état d'un cadre de pile et disposer d'un moyen spécial pour enregistrer les exceptions. Vous feriez essentiellement la même chose qu'un profileur de mémoire, en gardant une trace des instances qui sont créées. Les performances en seraient fortement affectées, à moins que vous ne limitiez la quantité d'informations que vous enregistrez.

Une meilleure solution serait d'utiliser les fonctionnalités Trace et Assert de l'espace de noms System.Diagnostics pour tracer sélectivement l'état du programme, ou d'utiliser un dispositif de journalisation (log4net, EnterpriseLibrary, NLog, créez votre propre dispositif simple) pour déverser des informations sur les fils, la pile et les variables au fur et à mesure que vous avancez.

Quoi qu'il en soit, l'ajout de toutes ces informations supplémentaires représente une charge importante.

EDIT : J'ai reçu des nouvelles de ce projet dans mon fil d'actualité : NTrace . Il semble qu'il corresponde un peu plus à ce que vous essayez de faire.

1voto

Tal Points 617

Utilisation Adplus . Il attachera un débogueur au processus, et générera (par défaut) un petit minidump lorsque des excéptions de première chance seront soulevées. Le fichier journal généré en plus contiendra également des informations sur les exceptions. Assurez-vous d'avoir les PDB disponibles pour voir toutes les informations de la pile de calcul.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X