В чем разница между Console.WriteLine () и Debug.WriteLine ()?

67

Какая разница между Console .WriteLine() vs Debug .WriteLine()?

Теги:

3 ответа

75
Лучший ответ

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

Как Debug.WriteLine записывает все прослушиватели трасс в коллекции Listeners, возможно, что это может быть выведено больше, чем одно место (окно вывода Visual Studio, консоль, файл журнала, стороннее приложение, которое регистрирует прослушиватель (я считаю, DebugView делает это) и т.д.).

  • 7
    DebugView строго следит за сообщениями, зарегистрированными с помощью собственного вызова Windows API OutputDebugStringDebugPrint ). DefaultTraceListener записывает в OutputDebugString , поэтому DebugView видит вывод. msdn.microsoft.com/en-us/library/...
26

Console.WriteLine() предназначен для программ консольного режима. Хорошая особенность процесса хостинга Visual Studio делает вывод его в окне вывода Visual Studio при отладке для процессов, у которых нет консоли. Это очень полезно при отладке, но будьте осторожны, что вы должны удалить этот код (или обернуть его с помощью #ifdef DEBUG), когда будете готовы создать сборку Release. В противном случае это добавит ненужные накладные расходы для вашей программы. Это делает его менее идеальным для отслеживания отладки.

Debug.WriteLine() генерирует информацию трассировки, если вы создаете с помощью DEBUG условный #defined. Это включено по умолчанию в сборке Debug. Если выход заканчивается, можно настроить в файле app.exe.config. Если эта конфигурация не переопределена,.NET автоматически предоставляет экземпляр класса DefaultTraceListener. Он отправляет текст Debug.WriteLine() с помощью функции API Windows OutputDebugString() для отладчика. Отладчик Visual Studio делает это в окне вывода, как и Console.WriteLine().

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

14

Если ваша цель использования Console.WriteLine предназначена исключительно для отладки, вы лучше использовать Debug.WriteLine.

Если вы хотите показать сообщение своему пользователю, вы должны использовать Console.WriteLine.

Debug.WriteLine предназначен только для отладки вашего приложения. В в режиме выпуска ваши отладочные заявления будут проигнорированы.

Другим использованием консольного приложения является проверка приватных сборок. Вместо традиционного подхода к созданию своего рода тестового жгута для тестирования скомпилированной версии DLL, вы можете просто перестроить DLL в качестве консольного приложения и ввода/вывода из/на консоль. Я нашел эту технику быстрее, чем тратить время на создание тестового жгута GUI.

  • 3
    «Если вы хотите показать сообщение своему пользователю, вы должны использовать console.writeline». Это может сбить с толку некоторых людей, потому что он покажет что-то пользователю только при выполнении в консольном приложении.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню