Я столкнулся с проблемой, когда кто-то явно отключил константы DEBUG
и TRACE
на проекте C# .NET, над которым я работал, поэтому мои вызовы Debug.WriteLine
не имели никакого эффекта. (На выходе не выводился вывод отладки.) После повторного включения их as described here, я начал видеть свой вывод.Почему Debug.WriteLine не работает без константы DEBUG?
Зная, как исправить это полезно, но мой вопрос: почему? Насколько я понимаю, DEBUG
- это константа времени компиляции , а класс Debug
уже скомпилирован, когда я строю свой проект. Итак, как мои звонки на Debug.WriteLine
пропущены; не следует ли их компилировать, как и весь мой другой код?
Я могу думать о нескольких возможных способов это может произойти:
- MS реализованы некоторые специальные «особенность» в компиляторе, чтобы удалить эти вызовы без постоянного
- Visual Studio настраивает отладчик такой, что он делает или не слушается на основе этого параметра проекта для вывода отладки при запуске
Debug
имеет некоторые сумасшедшие код, который рассматривает сборку вызова для какой-то флаг установлен во время компиляции
MS's documentation указывает, что это ожидаемое поведение, но я не смог найти документацию о том, как это работает. Конечно, это может быть и то, что мне даже не приходило в голову.
Так как это работает?
Обновлено по запросу – nitzmahone