У меня есть приложение MFC, скомпилированное с/clr, и я пытаюсь реализовать конечный обработчик для других исключенных управляемых исключений. Для нативных исключений выполняется переопределение CWinApp::ProcessWndProcException
.Завершенный обработчик исключений в смешанном исполняемом файле/управляемом?
Два события, предложенные в Jeff's CodeProject article, Application.ThreadException
и AppDomain.CurrentDomain.UnhandledException
, не поднимаются.
Может ли кто-нибудь предложить способ предоставления конечного обработчика обработанных исключений для смешанного исполняемого файла?
Update:
Оказывается, что эти обработчики исключений срабатывает только вниз по течению от Application.Run
или аналогичный (. Есть рабочий поток аромат, не помню название) Если вы хотите по-настоящему глобально поймать вы должны установить фильтр SEH. Вы не получите System.Exception
, и если вам нужен стоп-колл, который вам понадобится, чтобы перевернуть свой собственный ходок.
В вопросе форума MSDN на эту тему было предложено переопределить достаточно низкую точку основного потока MFC в try ... catch (Exception^)
. Например, CWinApp::Run
. Это может быть хорошим решением, но я не смотрел ни на какие перфомансы или последствия для стабильности. Вы получите возможность войти в систему со стеком вызовов до того, как вы заработаете, и вы можете избежать поведения исключаемых исключений по умолчанию.
Возможно, это поможет нам узнать больше об исключениях, которые бросаются, которые не пойманы двумя событиями, которые вы упомянули? – Charlie 2008-10-13 20:58:31
Любая управляемая исключение вообще - любой наследник System :: Exception. Точка вышеперечисленных событий - это срабатывание, когда/any/управляемое исключение не реализовано. – 2008-10-23 11:16:33