2010-06-10 5 views

ответ

76

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

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

+7

Строго DebugView контролирует сообщения, зарегистрированные через собственный API Windows, вызывают 'OutputDebugString' (и' DebugPrint'). «DefaultTraceListener» записывается в «OutputDebugString», поэтому DebugView видит результат. http://msdn.microsoft.com/en-us/library/system.diagnostics.defaulttracelistener.aspx – MarkJ

27

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 в качестве консольного приложения и ввода/вывода из/на консоль. Я нашел эту технику быстрее, чем тратить время на создание тестового жгута.

+2

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

Смежные вопросы