Поскольку вы выполняете COM-взаимодействие, я сильно подозреваю, что какой-то неуправляемый код выполнялся в другом потоке, что вызвало необработанное исключение. Это приведет к выходу приложения без вызова вашего обработчика необработанных исключений.
Кроме того, в .NET 4.0 политика стала сильнее, когда приложение было закрыто без предварительного уведомления.
При следующих условиях ваше приложение будет закрыто без предварительного уведомления (Environmnt.FailFast).
Pre .NET 4:
.NET 4:
- StackOverflowException 1016 *
- AccessViolationException
Вы можете переопределить поведение в .NET 4, украсив метод с помощью HandleProcessCorruptedStateExceptionsAttribute или добавив тег legacyCorruptedStateExceptionsPolicy в свой файл App.config.
Если ваша проблема - это не отловленное исключение в неуправляемом коде, вы можете запустить приложение в отладчике или позволить ему аварийно завершить работу и собрать дамп памяти для посмертной отладки. Отладка аварийных дампов обычно выполняется с помощью WindDbg .
После того, как вы загрузили Windbg, у вас есть adplus (скрипт vbs, расположенный в папке Programm Files \ Debugging Tools for Windows), который вы можете подключить к запущенному процессу, чтобы вызвать аварийный дамп, когда процесс завершается из-за исключения.
adplus -crash -p yourprocessid
Тогда у вас будет гораздо больше шансов узнать, что происходит, когда ваш процесс завершился. Windows также можно настроить для получения аварийного дампа через DrWatson в старых версиях Windows (отчеты об ошибках Windows)
Генерация аварийных дампов
Жесткие программисты будут настаивать на создании собственного инструмента генерации дампов, который в основном использует ключ реестра AEDebug . Когда этот ключ имеет значение, которое указывает на существующий исполняемый файл, он будет вызываться при сбое приложения, которое может, например, покажите диалог выбора отладчика Visual Studio или он может запустить генерацию дампа для вашего процесса.
Приостановить темы
Часто упускается из виду случай, когда вы создаете аварийный дамп с помощью внешнего инструмента (лучше полагаться на внешние инструменты, так как вы не знаете, насколько плох ваш процесс поврежден, и если его не хватает памяти, вы уже в плохом состоянии ситуация), что вы должны приостановить все потоки из сбойного процесса, прежде чем вы получите дамп.
Когда вы делаете большой полный дамп памяти, это может занять несколько минут в зависимости от выделенной памяти сбойного процесса. В течение этого времени потоки приложения могут продолжать наносить ущерб состоянию вашего приложения, оставляя вас с дампом, который содержит несогласованное состояние процесса, которое изменилось во время создания дампа.