Question

Ceci est probablement irréaliste, mais serait-il possible de permettre à un composant d'être notifié de toutes les exceptions de première chance dans son processus ayant lieu?

Nous avons une tierce partie (contractée par nous) des composants qui ne parviennent pas à faire autre chose que manger excepitions et la politique de la relation d'affaires font toute l'épreuve une douleur royale.

Nous sommes également conscients que certains de notre code exécute l'action décevante de laisser des exceptions disparaître dans l'abîme plutôt que d'utiliser notre enregistreur d'exception centralisée.

Je suppose que notre demande devrait être commencé comme un processus enfant d'une application de débogage pour obtenir l'effet, mais je me dis que cela vaut la peine de demander:)

Était-ce utile?

La solution

4.0 Net a ajouté en fait l'événement AppDomain.FirstChanceException . Il tire avant tout bloc catch est exécuté.

MSDN article a quelques exemples.

Fondamentalement, vous ajoutez simplement un gestionnaire d'événements comme celui-ci:

    AppDomain.CurrentDomain.FirstChanceException += 
        (object source, FirstChanceExceptionEventArgs e) =>
        {
            Console.WriteLine("FirstChanceException event raised in {0}: {1}",
                AppDomain.CurrentDomain.FriendlyName, e.Exception.Message);
        };

Autres conseils

Vous pouvez utiliser l'API de profilage .net pour obtenir des notifications d'exceptions à toutes sortes d'états, ce sont les méthodes disponibles:

ExceptionThrown
ExceptionSearchFunctionEnter
ExceptionSearchFunctionLeave
ExceptionSearchFilterEnter
ExceptionSearchFilterLeave
ExceptionSearchCatcherFound
ExceptionOSHandlerEnter
ExceptionOSHandlerLeave
ExceptionUnwindFunctionEnter
ExceptionUnwindFunctionLeave
ExceptionUnwindFinallyEnter
ExceptionUnwindFinallyLeave
ExceptionCatcherEnter
ExceptionCatcherLeave
ExceptionCLRCatcherFound
ExceptionCLRCatcherExecute

Utilisation du api de profilage est pas tout à fait pour les faibles de cœur; jetez un oeil à http://msdn.microsoft.com/en-us/ bibliothèque / ms404386.aspx comme point d'entrée pour votre recherche et http : //msdn.microsoft.com/en-us/library/bb384687.aspx pour la gestion des exceptions spécifiquement.

Je ne suis pas au courant d'une façon simple de le faire dans votre code managé comme

AppDomain.FirstChanceException += new EventHandler...

événement ou similaire.

EDIT: Une meilleure alternative est peut-être en utilisant l'API de débogage unamanaged à la place.

Fondamentalement, vous pouvez définir un ICorManagedCallback / le rappel de l'aide ICorManagedCallback2 ICorDebug :: SetManagedHandler et se callbacks lorsque des exceptions se produisent.

Je ne suis pas assez d'expérience dans ce domaine pour savoir quels sont les avantages / inconvénients sont sur les api de profilage.

Je viens d'avoir un coup d'œil à la

scroll top