Отключить вывод отладочной информации - PullRequest
5 голосов
/ 21 октября 2008

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

Как мне это сделать, но потом иметь возможность отключить его для версии выпуска?

Ответы [ 6 ]

16 голосов
/ 21 октября 2008

Все вызовы System.Diagnostics.Debug.Print() будут удалены при переключении на версию выпуска.

4 голосов
/ 21 октября 2008

Использование Log4net с ведением журнала на уровне отладки в выпуске и уровнем предупреждения или ошибки в производственном процессе.

Преимущество этого состоит в том, что вы можете снова включить вход в среду выпуска, если у вас есть проблемы, которые вы не можете воссоздать в процессе разработки.

[EDIT] FWIW, я обнаружил, что теперь я использую LOT меньше отладочных журналов, когда я использую разработку через тестирование. Большая часть моих журналов относится к категории предупреждений / ошибок.

3 голосов
/ 21 октября 2008

Посмотрите на классы System.Diagnostics.Debug и System.Diagnostics.Trace.

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

Отладка и трассировка - это взаимосвязанные, но разные действия. Пространство имен System.Diagnostics поддерживает их оба.

Используйте Debug.Write/WriteLine для записи сообщений отладки в файл журнала. (И к окну вывода.) Используйте Debug.Assert, ну почти везде. Весь код, который вы пишете с использованием класса Debug, удаляется перед компиляцией, если вы не определяете символ DEBUG в своем коде - это делается по умолчанию в опциях для конфигураций Debug и Release.

Используйте Trace.Write/WriteLine для написания сообщений трассировки. Эти методы функционально эквивалентны методам класса Debug; разница в том, что они удаляются, если вы не определяете символ TRACE в своем коде.

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

Вы также можете установить флаги в файле конфигурации приложения, которые уважают методы WriteIf и WriteLineIf, но по моему опыту они становятся довольно громоздкими.

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

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

0 голосов
/ 21 октября 2008

Вы также можете ознакомиться с решениями по аспектно-ориентированному программированию. Они делают такие вещи действительно хорошо. Посмотрите на PostSharp как на хорошую реализацию. Их пример кода обычно содержит пример того, что вы ищете.

0 голосов
/ 21 октября 2008

Я использую: System.Console.WriteLine ()

#if DEBUG
  System.Console.WriteLine("Message");
#endif 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...