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.
Réponses
Trop de publicités?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 .
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.
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.