Как 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
.
Вы не приняли 7-летний ответ? Любопытно, почему? –
Ну, если оба ответа были сделаны в течение часа друг от друга в тот же день, вам потребовалось 6 лет, чтобы передумать. Странное поведение откровенно. –