У меня есть сторонняя библиотека, которая иногда бросает исключение. Поэтому я решил обернуть свой код в try/catch (...), чтобы я мог записывать информацию об этом событии (никаких конкретных сведений, только так оно и было.)Не удается поймать исключение C++, используя catch (...)
Но по какой-то причине код по-прежнему сбои. На клиентских компьютерах он сильно сработает, и код для регистрации исключения в catch (...) никогда не будет выполнен. Если я запустил это на своей машине для отладки/разработки, я получаю всплывающее окно с вопросом, хочу ли я отлаживать. Когда я это делаю, он сообщает 0xC0000005: Доступ к чтению XXX.
Странно, что с более старой версией сторонней библиотеки точно такой же код УДАЕТСЯ исключение, а код для регистрации исключения DOES выполняется. (Я проверил это в VS смотреть происходят одни и те же условия.)
Вот псевдо-код, который выполняет:
Поэтому у меня есть два вопроса:
Есть ли какие-то изменения в том, как третья сторона могла скомпилировать библиотеку, чтобы мой код не смог поймать исключение? (Да, есть шанс, что я могу заставить третью сторону сделать все исправления и перекомпилировать для меня, если я знаю, что им сказать.)
Предполагая, что я не могу заставить третью сторону исправить это , что я могу сделать, чтобы поймать эти исключения? Я думаю о том, что ... есть ли способ определить, освобожден ли pObject?
Ничего себе, это ДЕЙСТВИТЕЛЬНО полезная статья, и на самом деле содержит работоспособное решение для меня ... старая библиотека должна была быть построена под VS2003, а новая библиотека предназначена для VS2008 - критическая разница. После установки моей библиотеки для компиляции w/option «Включить исключения C++: Да с исключениями SEH (/ EHa)» мой код теперь ловит этот экземпляр. По этой причине я нахожу этот ответ правильным ответом. Я хочу сказать, однако, что некоторые из других ответов предоставляют достоверную полезную информацию, особенно о том, что «не так много пользы в продолжении ...», поэтому благодаря всем !! –
Это вообще плохая идея, чтобы поймать исключения SEH с помощью C++ try/catch. Есть причина, по которой MS отключена по умолчанию в своих новых компиляторах. Как правило, вы должны использовать конструкции SEH (например, __try/__ except), а не включать этот параметр компилятора. – jalf
Michael Bray> Нет проблем, я думаю, здесь есть много ответов, которые помогают в таких проблемах. Я тоже проголосую за других, чтобы поднять их под этот ответ. jalf> Действительно. Вот что они делают в этой статье. – Klaim