Трассировка против отладки в .NET BCL - PullRequest
55 голосов
/ 07 октября 2008

Кажется, что

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

Когда бы вы использовали один, а не другой? Единственный ответ на этот вопрос, который я до сих пор выкопал, заключается в том, что вы используете класс Debug для генерации вывода, который вы видите только в конфигурации отладки, а Trace останется в выпуске конфигурации, но это на самом деле не отвечает на вопрос в моей голове.

Если вы собираетесь использовать свой код, зачем вам использовать Debug , поскольку Trace можно отключить без перекомпиляции?

Ответы [ 7 ]

55 голосов
/ 07 октября 2008

Основным отличием является то, которое вы указываете: отладка не включена в выпуск, а трассировка -.

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

Чтобы ответить на ваш последний вопрос, я не могу придумать причину, чтобы использовать Debug для инструментирования фрагмента кода, который я собирался выпустить.

Надеюсь, это поможет.

5 голосов
/ 26 декабря 2011

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

Трассировка помогает в отладке приложений, исправлении ошибок и профилировании (после выпуска).

Класс Debug бесполезен в режиме выпуска.

4 голосов
/ 30 мая 2009

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

Таким образом, класс отладки в основном используется для отладки на этапе разработки, а трассировка может использоваться для тестирования и оптимизации после компиляции и выпуска приложения.

2 голосов
/ 07 октября 2008

Для высокочувствительных блоков кода оставление трассировки скомпилированным, но отключенным может повлиять на производительность.

2 голосов
/ 07 октября 2008

Я бы посмотрел на использование log4net для трассировки, поскольку его возможности гораздо более гибкие и надежные.

Но для настоящих отладочных сообщений, которые я никогда не собираюсь видеть кому-либо, кроме меня или внутреннего тестировщика, я, вероятно, буду придерживаться Debug.

1 голос
/ 10 июня 2018

Это полная разница между трассировкой и отладкой: И Debug, и Trace используют пространство имен System.Diagnostics.

Debug

  • Используется класс Debug.
  • Используется в отладочной сборке.
  • Используется время разработки приложения.
  • В режиме отладки компилятор вставляет некоторый код отладки в исполняемый файл.
  • Класс отладки работает только в режиме отладки.
  • Анализ производительности нельзя выполнить с помощью Debug.
  • Отладка используется для поиска ошибок в программе.
  • Для отладки мы можем использовать метод Debug.Write ().
  • Отладка выполняется в том же потоке, что и основная программа.

Трассировка

  • Используется класс трассировки.
  • Оператор трассировки по умолчанию включается при компиляции программы в выпущенную сборку.
  • Класс трассировки используется для тестирования и оптимизации даже после того, как приложение скомпилировано и выпущено.
  • Класс трассировки работает как в режиме отладки, так и в режиме выпуска.
  • Трассировка выполняется в другом потоке из основного потока выполнения главной программы.
  • Для Trace мы можем использовать метод Trace.Write ().
  • Используется время развертывания приложения.

ссылка: точечный угол

1 голос
/ 07 октября 2008

Вы ответили на свой вопрос. Если сообщения отладки остаются, люди могут их видеть. Например, скажем, вы делаете:

Debug.WriteLine("Connecting to DB with username: blah and PW: pass");

Это может увидеть любой, кто декомпилирует ваш код. Но это может быть чем-то жизненно важным для вас, чтобы знать во время тестирования.

Трассировка отличается. Если вы собираетесь делать трассировку, я бы просто использовал log4net.

...