У меня есть довольно большой фрагмент кода, который хорошо работает в разрабатываемой версии со многими assert()
в коде. Я отключил утверждения с помощью директивы -DNDEBUG
, переданной в g++, и теперь мой код ломается из-за seg. вина. Есть ли что-то, чего я не знаю об assert()?
assert, -NDEBUG и ошибка сегментации
Ответы (1)
Насколько мне известно, наиболее распространенной проблемой с assert является наличие кода с побочными эффектами внутри самого assert. При компиляции с параметром -DNDEBUG утверждения по существу закомментированы, поэтому код внутри утверждения не выполняется. Страница руководства assert упоминает об этом в разделе ошибок:
BUGS
assert() is implemented as a macro; if the expression tested has side-
effects, program behavior will be different depending on whether NDEBUG
is defined. This may create Heisenbugs which go away when debugging is
turned on.
person
wollw
schedule
27.06.2011
Чтобы решить эту проблему, используйте VERIFY, а не ASSERT для кода с побочными эффектами, например. см. здесь.
- person Kerrek SB; 27.06.2011