Отключить вывод отладочной информации
Вопрос
Я бы хотел добавить в свой код некоторые операторы print, чтобы показать, где я нахожусь, и вывести важные значения в окно консоли.
Как я могу это сделать, но затем иметь возможность отключить его для версии выпуска?
Решение
Все звонки в System.Diagnostics. Debug.Print ()
будет удален при переходе на версию выпуска.
Другие советы
Используйте Log4net с ведением журнала на уровне отладки в выпуске и уровнем предупреждений или ошибок в производство. р>
Преимущество этого заключается в том, что вы можете снова включить вход в среду выпуска, если у вас есть проблемы, которые вы не можете воссоздать в процессе разработки.
[EDIT] FWIW, я обнаружил, что теперь я делаю LOT менее отладочную запись в журнал, когда я использую Test-Driven Development. Большая часть моих журналов относится к категории предупреждений / ошибок.
Посмотрите на классы System.Diagnostics.Debug и System.Diagnostics.Trace.
Отладка и трассировка - это связанные, но разные действия. Пространство имен 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.
Я использую: System.Console.WriteLine () р>
#if DEBUG
System.Console.WriteLine("Message");
#endif
Вы также можете ознакомиться с решениями аспектно-ориентированного программирования. Они делают такие вещи действительно хорошо. Посмотрите на PostSharp как на хорошую реализацию. Их пример кода обычно содержит пример именно того, что вы ищете.