В Windows вы можете создать фильтр необработанных исключений, вызвав SetUnhandledExceptionFilter () . После этого в любое время, когда генерируется исключение, которое не обрабатывается где-либо в вашем приложении, будет вызван ваш обработчик.
Ваш обработчик может использоваться для освобождения ресурсов, генерации файлов дампа (см. MiniDumpWriteDump ) или всего, что вам нужно, чтобы убедиться, что все сделано.
Обратите внимание, что существует множество «ошибок», связанных с тем, как вы пишете свою функцию обработчика исключений. В частности:
- Вы не можете вызвать любую функцию CRT, такую как
new
- Вы не можете выполнять выделение на основе стека
- Если вы сделаете в обработчике что-нибудь, что вызовет исключение, Windows немедленно прекратит работу вашего приложения, вырвав кости из его спины. У вас больше нет шансов изящно отключиться.
Вы можете вызывать многие функции Windows API. Но вы не можете sprintf
, new
, delete
... Короче говоря, если это не функция WINAPI, это, вероятно, небезопасно.
Из-за всего вышесказанного желательно, чтобы все переменные в вашем обработчике static
были переменными. Вы не сможете использовать sprintf, поэтому вам придется форматировать строки заранее, во время инициализации. Просто помните, что машина находится в очень нестабильном состоянии, когда вызывается ваш обработчик.