Final managed exception handler in a mixed native/managed executable?,
I have an MFC application compiled with /clr and I’m trying to implement a final handler for otherwise un-caught managed exceptions. For native exceptions, overriding
The two events suggested in Jeff’s
AppDomain.CurrentDomain.UnhandledException, are not raised.
Can anyone suggest a way to provide a final managed exception handler for a mixed executable?
It appears that these exception handlers are only triggered downstream of
Application.Run or similar (there’s a worker thread flavor, can’t remember the name.) If you want to truly globally catch a managed exception you do need to install an SEH filter. You’re not going to get a
System.Exception and if you want a callstack you’re going to have to roll your own walker.
In an MSDN forum question on this topic it was suggested to override a sufficiently low-level point of the main MFC thread in a
try ... catch (Exception^). For instance,
CWinApp::Run. This may be a good solution but I haven’t looked at any perf or stability implications. You’ll get a chance to log with a call stack before you bail and you can avoid the default windows unahndled exception behavior.
Taking a look around the internets, you’ll find that you need to install a filter to get the unmanaged exceptions passing the filters on their way to your AppDomain. From
The CLR relies on the SEH unhandled exception filter mechanism to catch unhandled exceptions.
That’s the answer Final managed exception handler in a mixed native/managed executable?, Hope this helps those looking for an answer. Then we suggest to do a search for the next question and find the answer only on our site.
The answers provided above are only to be used to guide the learning process. The questions above are open-ended questions, meaning that many answers are not fixed as above. I hope this article can be useful, Thank you