Как долгосрочный пользователь Eiffel, я могу сказать вам, что он используется не так, как debug / nodebug. Как уже указывалось, единственный эффект - отключение операторов assert. Цель assert состоит в том, чтобы добавить проверки до и после условия. Рекомендуется интенсивное его использование, и оно может снизить производительность вашей программы в 10 и более раз. Это называется «дизайн для бедных» по контракту.
При использовании NDEBUG это вовсе не означает, что вы закончили с отладкой, просто это тяжелое средство отладки удалено.
Популярная версия Debug / Release, к сожалению, не лучший пример для практической разработки, когда у вас есть веские причины поразмышлять над моделью выпуска Alpha, Beta, Release.
В альфа-программном обеспечении настолько глючно, что вы компилируете его без символов NDEBUG и отладчика. Бета-версия компилируется с помощью символов набора и отладчика NDEBUG (и, возможно, уже с переключателями оптимизации), а окончательный выпуск затем компилируется с использованием NDEBUG и полной оптимизации.