Как заставить STL генерировать исключения вместо утверждений? - PullRequest
5 голосов
/ 28 мая 2011

Я должен написать тесты для какого-то плохо написанного кода на C ++. Проблема заключается в том, что код вызывает утверждения STL / отладочные разрывы во многих ситуациях (обычно вызванных глупыми ошибками, такими как доступ за пределы строки / вектора), что приводит к завершению тестов.

Возможно ли сделать исключения STL (которые могут быть перехвачены) вместо простого сбоя?

Я должен сохранить свои изменения в исходном коде до абсолютного минимума.

Спасибо за помощь

1 Ответ

3 голосов
/ 28 мая 2011

Это определенно зависит от STL, который вы используете. Тем не менее, это может быть просто невозможно.

Стандарт определяет ряд гарантий (особенно C ++ 0x one) и определяет, является ли функция сгенерированной или нет, является частью этих гарантий. Например std::vector<T>::operator[] не скинет.

При этом может быть несколько хитростей (специальные флаги компиляции для отладки или изменения макроса, используемого в STL, если он есть), но он будет очень специфичным.

Другим решением может быть попытка запустить программу в виртуализированной среде. Например, в Linux вы можете запустить его под Valgrind. Он сообщит об ошибках доступа, но фактически не остановит выполнение программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...