Если вы хотите, чтобы какой-либо код был включен или не включен в сборки отладки / выпуска, обычно макрос препроцессора _DEBUG
определяется для сборок отладки (по крайней мере, в MSVC ++ CRT, который является соглашением), но он не определяет если отладчик подключен, он просто позволяет вам включить другой код для сборок отладки / выпуска.
Если вам нужна проверка времени выполнения для подключенных отладчиков, вам следует использовать IsDebuggerPresent API, который определяет, подключен ли отладчик пользовательского режима.
Обратите внимание, что это не на 100% надежно, так как при некоторой не такой сложной работе отладчик может заставить его лгать вашему приложению. Другими словами, это не очень хорошо для защиты / защиты от мошенничества и подобных вещей, это больше для того, чтобы включить дополнительную помощь отладчику (например, как говорит сама страница, выводить больше диагностической информации с помощью OutputDeubgString, так далее.). Более того, он не обнаружит отладчики в режиме ядра, которые в любом случае могут делать что хотят.
Во всяком случае, я советую вам избегать использования этой функции для сложных вещей, так как вы вводите разные пути кода, когда отладчик подключен, и это может затруднить отладку «странных» ошибок. Весь код, который я использовал косвенным образом и который представлял такое поведение (например, почти недокументированная куча отладки Windows), всегда вызывал у меня сильные головные боли.