2009-08-02 4 views
14

Я использую C# (используя VS IDE) для разработки. Я смущен о заявлениях Debug/Trace.Где мы используем операторы отладки/трассировки

Где и почему мы используем эти утверждения?

Я часто видел их в исходном коде другого разработчика.

Может ли кто-нибудь предоставить указатели?

+0

Вы не приняли 7-летний ответ? Любопытно, почему? –

+0

Ну, если оба ответа были сделаны в течение часа друг от друга в тот же день, вам потребовалось 6 лет, чтобы передумать. Странное поведение откровенно. –

ответ

19

Отладка Операторы присутствуют только в сборках отладки.

Отчёты представлены как в сборках Debug, так и Release.

Вы размещаете операторы Debug и Trace, где вы хотите вывести значение чего-то для отладки или проверки.

поддержка статьи

Это MS может представлять интерес: How to trace and debug in Visual C#

маршрутах класса трассировки сообщений в слушателей: классы, которые предназначены принимать сообщения трассировки и отправить их в соответствующее устройство вывода. Коллекция Trace.Listeners содержит список слушателей , зарегистрированных в системе. Вызов любой из методов вывода Trace будет отправит сообщение всем зарегистрированным слушателям . Класс под названием DebugTraceListener автоматически добавляет к коллекции Listeners, а направляет сообщения в OutputDebugString Функция Win32 API.

В SysInternals DebugView приложение будет захватывать любой вывод, направленный через OutputDebugString.

19

Как Debug, так и Trace используются для вывода дополнительных сообщений за пределы обычного журнала ошибок для вашего приложения. То, что выводится, зависит от программиста. Типичными вещами, которые могут быть записаны, являются записи/выходы метода, значения аргументов метода, возвращаемые значения конфигурации, используемые данные конфигурации, критические значения производительности и т. Д.

Основное отличие между Debug и Trace заключается в том, что Trace присутствует в выпуске а Debug - нет. Я считаю Trace более полезным, поскольку он позволяет вам получать дополнительную информацию о функционировании вашего приложения в производственной среде (при условии, что вы добавили Trace для начала). Одна вещь, которую следует учитывать при добавлении сообщений Trace, - это подумать о том, какую информацию вы хотели бы получить, если возникла сложная проблема производства.

Отладка и трассировка условно скомпилированы. Отладка (по умолчанию) скомпилирована в сборку отладки, в то время как Trace (по умолчанию) скомпилируется в сборки релиза. Условная компиляция определяется флагами компиляции (для Trace:/d: TRACE) или препроцессорными директивами (для Trace: #define TRACE).

Хорошо, что эти заявления могут принести вам пользу во время разработки, но их можно легко удалить для производственных сборок, изменив флаг компиляции.

Выход

Чтобы получить на выходе Следа требует трассировки слушателя. Существует прослушиватель трассировки по умолчанию (не удивительно) DefaultTraceListener. DefaultTraceListener отправляет сообщения Trace в общую память (через метод Win32 OutputDebugString).

ОК, но как вы видите эти сообщения трассировки?

Самый простой способ - запустить программу для чтения информации для вас. DebugView является де-факто стандартом для этого. В значительной степени просто запустите его, и сообщения начинают появляться.

Вы также можете направлять вывод в другие места, используя TextWriterTraceListener или EventLogTraceListener.

Вы также можете добавить трассировки слушателей с помощью конфигурации:

<configuration> 
    <system.diagnostics> 
    <trace autoflush="false" indentsize="4"> 
     <listeners> 
     <add name="myListener"type="System.Diagnostics.TextWriterTraceListener"initializeData="TextWriterOutput.log" /> 
     <remove name="Default" /> 
     </listeners> 
    </trace> 
    </system.diagnostics> 
</configuration> 


Если вы уже используете поставщика протоколирования (например, Enterprise Library, log4net), то вы можете захотеть взглянуть на использование своего подхода, так как они почти всегда обеспечивают аналогичную функцию условного ведения журнала. Однако они могут не предоставлять функциональные возможности, подобные Assert или WriteIf.

+0

Я не согласен - трассировка и отладка могут использоваться для регистрации ошибок, они не являются «за пределами» нормального журнала ошибок. –

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