Векторный обработчик исключений и обработка ошибок во время выполнения Microsoft C
Вопрос
Недавно я реализовал векторную обработку исключений для обнаружения ошибок в нашем программном обеспечении.Это особенно полезно, поскольку мы только что перешли с vc6 на vs2005.Мы столкнулись с некоторыми проблемами при использовании библиотеки STL (обычно люди делают то, чего не следует).Я пытаюсь отловить эти ошибки с помощью моего векторного обработчика исключений.
Однако, похоже, это не вызывается, вместо этого эти ошибки обрабатываются внутри библиотеки времени выполнения Microsoft Visual Studio C.
Мой вопрос:
Есть ли способ отключить проверку ошибок во время выполнения и передать исключения обработчику VE?
Спасибо Рич
Решение
http://msdn.microsoft.com/en-us/library/aa985973%28VS.80%29.aspx
#define _SECURE_SCL 1
#define _SECURE_SCL_THROWS 1
Вышеупомянутое позволяет мне создавать исключения.
Другие советы
Вы можете отключить дополнительные проверки во время выполнения.Однако не все ошибки, которые он улавливает, приведут к сбою, который можно перехватить.
На полях:Эти проверки часто потребляют значительную производительность и по умолчанию не отключаются в сборках выпуска.
#define _SECURE_SCL 0
Лучше всего делать это через настройки проекта, так как могут возникнуть неприятные проблемы с компоновщиком, если настройки различаются внутри или между файлами.
Я столкнулся с этой проблемой некоторое время назад, и мне потребовалось некоторое время, чтобы понять, что они делают во время выполнения.Я бы рекомендовал прочитать «Миграция с предыдущих версий Visual C++» на MSDN как минимум дважды.Тогда читай «Расширения библиотеки C, часть I:Интерфейсы проверки границ (ISO/IEC TR 24731-1)".Последнее является стандартный на этом основана большая часть проверки параметров.
Как только вы поймете, что они задумали, просто определите _CRT_SECURE_NO_DEPRECATE
, _SECURE_SCL
, и _SECURE_SCL_THROWS
в настройках вашего проекта.Тогда убедитесь, что у вас есть «Включить исключения C++» установлен в «Да, с исключениями SEH (/EHa)» и «Базовые проверки во время выполнения» установлен в "По умолчанию" в вашем проекте.По крайней мере, это то, что работает для нас сейчас.Однако потребовалось некоторое время, чтобы удалить неправильный код, который мы создали в VC6.
Самое важное, что вы можете сделать, — это выделить несколько недель и по-настоящему вникнуть в то, что делают различные параметры и макросы.Затем выясните, что работает с вашим кодом.Мы не сделали это достаточно рано, и нам было очень больно, когда у нас возникли «плохие сборки», вышедшие из строя.