Где мы используем операторы Debug/Trace

Я использую С# (используя VS IDE) для разработки. Я запутался в операциях Debug/Trace.

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

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

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

Ответы

Ответ 1

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

Операторы

Trace присутствуют в сборках Debug и Release.

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

Эта статья поддержки MS может представлять интерес: Как отслеживать и отлаживать в Visual С#

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

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

Ответ 2

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

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

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

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

Выход

Чтобы получить на выходе 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.