Как перехватить ошибку в C ++, когда __try __except не может

У меня есть код, который использует стороннюю библиотеку.

Эта библиотека выдает случайное исключение нарушения прав доступа. Обычная попытка / отлов не уловила ошибку, и программа сильно упала.

Вместо этого я смог использовать __try __except, чтобы поймать ошибку, записать ее в журнал и затем изящно выйти из программы.

Сторонняя организация только что обновила свою библиотеку, и теперь небольшое подмножество записей, которые вызывали ошибки нарушения прав доступа, просто умирает в работе с «[имя программы] перестало работать»

В Visual Studio при переходе я получаю «Библиотека времени выполнения Microsoft Visual Studio C обнаружила фатальную ошибку в [имя программы]».

Я обновил свой оператор __except, чтобы поймать все (или я так верю), и это все еще происходит.

Оригинал __except:

__except (eps = GetExceptionInformation(), ((GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION)
? EXCEPTION_EXECUTE_HANDLER
: EXCEPTION_CONTINUE_SEARCH)) {
sprintf("error message");
result = 99;
}

Новый __except:

__except (eps = GetExceptionInformation(), ((1 == 1)
? EXCEPTION_EXECUTE_HANDLER
: EXCEPTION_CONTINUE_SEARCH)) {
sprintf("error message");
result = 99;
}

0

Решение

Просто дружелюбный FYI, первое выражение в вашем фильтре исключений eps = GetExceptionInformation() кажется неиспользованным.

Кроме того, если вы хотите перехватить все исключения, __except (EXCEPTION_EXECUTE_HANDLER) должно быть все, что вам нужно. Хотя я бы рекомендовал это только в целях отладки.

Если это не улавливает ваше исключение, возможно, библиотека пытается обработать само исключение, и в самой библиотеке происходит что-то интересное. Я бы посоветовался с поставщиком библиотеки и спросил, является ли это известной проблемой.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]