Я пытаюсь перехватить все неожиданные завершения в моем процессе.
Я использовал эти функции, чтобы перехватывать все необработанные ошибки и исключения, о которых я могу думать, но все же этого недостаточно:
SetUnhandledExceptionFilter(OnUnhandledNativeException);
set_terminate(set_terminateHandler);
set_unexpected(set_unexpectedHandler);
_set_purecall_handler(set_purecallHandler);
_set_new_handler(HandleProgramMemoryDepletion);
_set_invalid_parameter_handler(InvalidParameterHandler);
signal(SIGABRT, sigabrt_handler);
signal(SIGINT, sigabrt_handler);
signal(SIGTERM , sigabrt_handler);
Эти функции улавливают практически любую ошибку в приложении.
Но когда приложение завершается из-за сбоя GDI (например, GDI из ресурсов), ни одна из этих функций не вызывается.
Кто-нибудь знает, как я могу отловить события ошибок GDI?
Я уверен, что должен быть какой-то способ перегрузить его и изменить функцию обратного вызова.
И кто-нибудь знает какие-либо другие странные сценарии, когда этих функций просто недостаточно?
Примечание:
Точная ошибка, которую он не перехватывает: «Требуемый ресурс был недоступен».
Это происходит, когда вы создаете много объектов GDI и не выпускаете их.
Сбой программы из-за недостатка ресурсов задолго до того, как ей не хватит памяти.