Tengo una aplicación MFC compilada con/clr y estoy tratando de implementar un controlador final para las excepciones gestionadas de otra manera no detectadas. Para las excepciones nativas, prevalece el CWinApp::ProcessWndProcException
.Gestor de excepciones administrado final en un ejecutable nativo/administrado mixto?
Los dos eventos sugeridos en Jeff CodeProject article, Application.ThreadException
y AppDomain.CurrentDomain.UnhandledException
, no se generan.
¿Alguien puede sugerir una forma de proporcionar un manejador de excepciones gestionado final para un ejecutable mixto?
Actualización:
Parece que estos controladores de excepciones sólo se lanzan aguas abajo de Application.Run
o similar (. Hay un sabor subproceso de trabajo, no recuerdo el nombre) Si se desea capturar verdaderamente a nivel mundial una excepción gestionada, necesita instalar un filtro SEH. No obtendrás un System.Exception
y si quieres un callstack, tendrás que mover tu propio andador.
En una pregunta del foro de MSDN sobre este tema, se sugirió anular un punto suficientemente bajo del subproceso MFC principal en try ... catch (Exception^)
. Por ejemplo, CWinApp::Run
. Esta puede ser una buena solución, pero no he analizado ninguna implicación de perf o estabilidad. Tendrás la oportunidad de iniciar sesión con una pila de llamadas antes de fianza y puedes evitar el comportamiento de excepción predeterminado de windows.
Tal vez nos ayudaría saber más acerca de las excepciones que están siendo lanzadas y que no son detectadas por los dos eventos que usted mencionó? – Charlie
Cualquier excepción gestionada en absoluto: cualquier heredero de System :: Exception. El objetivo de los eventos anteriores es disparar cuando no se detecta ninguna excepción gestionada/any/managed. –