Запись в окно вывода Visual Studio? - PullRequest
532 голосов
/ 27 февраля 2012

Я пытаюсь записать сообщение в окно вывода для целей отладки.Я искал функцию, подобную Java system.out.println("").Я пытался Debug.Write, Console.Write и Trace.Write.Он не выдает ошибку, но и ничего не печатает.

Проверены опции «Определить константу отладки» и «Определить константу».

Меню Инструменты Параметры Отладка Параметр «Перенаправить весь текст окна вывода в окно немедленного действия» * не отмечен.

Конфигурация: Активна (отладка)

Примечание. Я создал проект с помощью мастера как «Приложение Windows Forms», если это необходимо.Я понятия не имею, где искать.

Ответы [ 11 ]

676 голосов
/ 27 февраля 2012

Добавьте пространство имен System.Diagnostics, и затем вы можете использовать Debug.WriteLine() для быстрой печати сообщения в окне вывода IDE. Для более подробной информации, пожалуйста, обратитесь к ним:

140 голосов
/ 27 февраля 2012

Это запишет в окно вывода отладки:

using System.Diagnostics;

Debug.WriteLine("Send to debug output.");
76 голосов
/ 05 февраля 2013

Использование:

System.Diagnostics.Debug.WriteLine("your message here");
51 голосов
/ 27 февраля 2012
Debug.WriteLine

- это то, что вы ищете.

Если нет, попробуйте сделать следующее:

Меню Инструменты Параметры Отладка → снимите флажок Отправить вывод для немедленного .

21 голосов
/ 11 февраля 2016

Для меня работало только пространство имен Trace , а не Debug:

System.Diagnostics.Trace.WriteLine("message");

Я работаю в проекте C # в Visual Studio 2010.

16 голосов
/ 27 февраля 2012

Возможно, вы ищете

MessageBox.Show()

или

Debug.Writeline()
8 голосов
/ 27 ноября 2016

Звонок

System.Diagnostics.Debug.WriteLine("message");
Сбой

при работе с .NET Core (V 1.0 или 1.1).

Мы должны создать и использовать регистратор из Microsoft.Extensions.Logging, но этот журнал появляется только во всплывающем окне консоли dotnet.exe, а не в окне «Вывод» Visual Studio.

4 голосов
/ 04 октября 2017

Для этого требуется сторонний фреймворк, а именно Serilog , но, тем не менее, я обнаружил, что это очень плавный опыт с получением результата в каком-то месте, которое я вижу.

Сначала необходимо установить Trace sink Serilog . После установки вам необходимо настроить регистратор следующим образом:

Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Trace()
    .CreateLogger();

(Вы можете установить другой минимальный уровень или установить для него значение конфигурации или любую из нормальных функциональных возможностей Serilog. Вы также можете установить регистратор Trace на определенный уровень, чтобы переопределить настройки, или как вы хотите это сделать .)

Тогда вы просто регистрируете сообщения в обычном режиме, и они отображаются в вашем окне вывода:

Logger.Information("Did stuff!");

Это не так уж важно, поэтому позвольте мне объяснить некоторые дополнительные преимущества. Самым большим для меня было то, что я мог одновременно войти в окно вывода и на консоль :

Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Trace()
    .WriteTo.Console(standardErrorFromLevel: LogEventLevel.Error)
    .CreateLogger();

Это дало мне большую гибкость в отношении того, как я потребляю вывод, без необходимости дублировать все мои вызовы на Console.Write с Debug.Write. При написании кода я мог запустить инструмент командной строки в Visual Studio, не боясь потерять вывод при его выходе. Когда я развернул его и мне нужно было что-то отладить (и у меня не было Visual Studio), консольный вывод был легко доступен для моего использования. Те же сообщения также могут быть записаны в файл (или любой другой вид приемника), когда он выполняется как запланированное задание.

Суть в том, что использование Serilog для этого действительно облегчило передачу сообщений во множество мест назначения, гарантируя, что я всегда мог легко получить доступ к выходу независимо от того, как я его запустил.

Также требуется минимальная настройка и код.

1 голос
/ 08 июня 2017

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

В конечном итоге я использовал окно командной строки и ввел команду Debug.Print, так какпоказано ниже.Это напечатало объект памяти в формате, который можно скопировать как текст, и это все, что мне действительно нужно.

> Debug.Print <item>

  id: 1
  idt: null
  igad: 99
  igbd: 99
  gl_desc: "New #20"
  te_num: "1-001-001-020"
1 голос
/ 02 июня 2017

В Visual Studio 2015 у меня сработало следующее:

OutputDebugStringW(L"Write this to Output window in VS14.");

Прочитайте документацию для OutputDebugStringW здесь .

enter image description hereОбратите внимание, что этот метод работает, только если вы отлаживаете свой код (debug mode)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...