Assert не будет отображать сообщение об ошибке - PullRequest
4 голосов
/ 11 июля 2011

У меня странная проблема с assert в Visual C ++ 2005. Я пытался ввести утверждения в моей программе, и независимо от того, какие утверждения я пытаюсь использовать (assert () или BOOST_ASSERT_MSG), оно выдает точно такое же сообщение об ошибке. который говорит мне только о том, что произошла ошибка отладки.

Ошибка отладки!

Программа: ...

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

(Нажмите «Повторить» для отладки приложения)

Вот усиление, которое я использую

BOOST_ASSERT_MSG(deathRow.size() >= 3, "There are less than 3 blocks being deleted!");

И да, выдает точно такое же сообщение об ошибке, как:

assert(deathRow.size() >= 3 && "There are less than 3 blocks being deleted");

Произошла неописуемая ошибка, независимо от того, какой проект я использую, новый или старый.

Понятия не имею почему. Я знаю, что раньше использовал утверждения в другой программе и у меня не было этой проблемы. Помощь будет оценена.

1 Ответ

6 голосов
/ 11 июля 2011

Если вы используете макрос Microsoft _ASSERTE (обратите внимание на E для Выражение ), то сообщение также появится в диалоговом окне подтверждения.

Причина, по которой существуют обе версии ASSERT, заключается в том, что обе имеют свои преимущества и недостатки, и вы можете выбрать, какой хотите.

  • _ASSERTE дает лучшую диагностику, но приводит к немного большим двоичным файламтекстовое представление выражения должно быть включено в двоичный файл)
  • _ASSERT дает меньше информации в диалоге подтверждения, но приводит к меньшим двоичным файлам.

Поскольку оба варианта производят только кодв отладочной сборке я обычно использую _ASSERTE, потому что размер двоичного файла почти не изменяется и не имеет большого значения в отладочных сборках.

...