2010-02-19 2 views

ответ

15

Оба условно скомпилированы с использованием атрибута [Conditional].

Если в сборке установлен флаг TRACE, то вызовы класса Trace приведут к записи трассировки. По умолчанию TRACE определяется как в режиме отладки, так и в режиме release. Если флаг не определен, ничего не произойдет.

Если флаг DEBUG определен, то вызовы класса Debug приводят к тому, что выходные данные записываются в поток отладки. По умолчанию DEBUG определяется только в режиме отладки.

Другое важное отличие состоит в том, что при отслеживании легко настроить trace listeners и решить позже, что вы хотите сделать с выходом трассировки. Он более гибкий, чем отладочный вывод, и обычно лучше подходит для входа в производственное приложение.

+0

Так, если флаг TRACE определяется по умолчанию, есть способ отключить его в режимах выпуска или отладки? – Carlo

+1

@ Карло: Конечно, это в свойствах проекта, вкладке «Создание». Есть два флажка, в котором указано «Определить константу DEBUG», а другое - «Определить константу TRACE». Они соответствуют тому, как будут вести себя классы 'Debug' и' Trace' и соответствующие им методы 'Write'. – Aaronaught

+0

Отлично! Спасибо, отличный ответ! – Carlo

2

Разница заключается в режиме деблокирования.

Debug.Write не будет скомпилирован в код, если символ DEBUG не определен, то есть компилируется в режиме деблокирования.

Однако Trace.Write будет скомпилирован как в режиме отладки, так и в режиме Release.

4

DEBUG: DEBUG settings

РЕЛИЗ: RELEASE settings

Как вы видите константа TRACE включена в обоих конфиги по умолчанию

Смежные вопросы