Это действительно зависит от того, что вы называете - «компиляция режима отладки». Это может означать много разных вещей для разных людей:
- нет оптимизаций, поэтому код легче отлаживать
- генерация символов отладки, снова для помощи отладчику
- использование функции
assert
- компиляция с отладочными библиотеками, которые выполняют дополнительную проверку во время выполнения
- использование других пользовательских методов отладки
NDEBUG
контролирует только пулю # 3. Конечно, это часто сочетается с другими, потому что имеет смысл использовать их вместе. Но ничто не заставляет вас использовать их все - вы можете определять различные комбинации этих вещей, например, оптимизированная сборка с проверкой утверждений и т. д.