Векторный обработчик исключений и обработка ошибок во время выполнения Microsoft C

StackOverflow https://stackoverflow.com/questions/1328434

Вопрос

Недавно я реализовал векторную обработку исключений для обнаружения ошибок в нашем программном обеспечении.Это особенно полезно, поскольку мы только что перешли с 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.

Самое важное, что вы можете сделать, — это выделить несколько недель и по-настоящему вникнуть в то, что делают различные параметры и макросы.Затем выясните, что работает с вашим кодом.Мы не сделали это достаточно рано, и нам было очень больно, когда у нас возникли «плохие сборки», вышедшие из строя.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top