J'ai une application MFC compilée avec/clr et j'essaie d'implémenter un gestionnaire final pour les exceptions managées autrement non interceptées. Pour les exceptions natives, la priorité CWinApp::ProcessWndProcException
fonctionne.Dernier gestionnaire d'exceptions géré dans un exécutable mixte natif/géré?
Les deux événements suggérés dans Jeff CodeProject article, Application.ThreadException
et AppDomain.CurrentDomain.UnhandledException
ne sont pas déclenchés.
Quelqu'un peut-il suggérer un moyen de fournir un gestionnaire d'exceptions managé final pour un exécutable mixte?
Mise à jour:
Il semble que ces gestionnaires d'exceptions ne sont déclenchées en aval de Application.Run
ou similaire (. Il y a une saveur de thread de travail, ne peut pas se rappeler le nom) Si vous voulez attraper vraiment à l'échelle mondiale un exception gérée, vous devez installer un filtre SEH. Vous n'allez pas obtenir un System.Exception
et si vous voulez une callstack, vous devrez rouler votre propre walker.
Dans une question de forum MSDN sur ce sujet, il a été suggéré de remplacer un point suffisamment faible du thread principal MFC dans un try ... catch (Exception^)
. Par exemple, CWinApp::Run
. C'est peut-être une bonne solution, mais je n'ai pas examiné les effets de perf ou de stabilité. Vous aurez une chance de vous connecter avec une pile d'appels avant de vous libérer et vous pourrez éviter le comportement d'exception non effacé des fenêtres par défaut.
Peut-être que cela nous aiderait à en savoir plus sur les exceptions qui sont lancées et qui ne sont pas détectées par les deux événements que vous avez mentionnés? – Charlie
Toute exception gérée - tout héritier de System :: Exception. Le point des événements ci-dessus est de se déclencher lorsque/any/l'exception gérée est non interceptée. –