2012-02-27 2 views
424

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

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

Меню ИнструментовОпцияОтладочных"Перенаправить весь текст выходного окна в окно Immediate" опции не проверяется.

Конфигурация: Активный (Debug)

Примечание: Я создал проект с мастером, как при необходимости "Windows Forms Application". Я понятия не имею, где искать.

+17

попробуйте использовать 'Debug.WriteLine()' –

+6

Поскольку это более старое сообщение, я добавлю это как комментарий для тех, кто спотыкается о вопросе. Вместо фактического изменения кода вы также можете использовать специальные точки останова, называемые точками трассировки. См. [Документация MSDN] (http://msdn.microsoft.com/en-us/library/vstudio/232dxah7 (v = vs.100) .aspx) –

+10

Просто напоминание о том, что Debug.WriteLine() будет работать только при запуске в Debug. Это означает, что он работает с F5, а не с CTRL-F5. Это легко пропустить. –

ответ

529

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

+1

Спасибо. Я предполагаю, что нет возможности писать на вывод, если я начинаю без отладки (ctrl-f5) правильно? –

+1

Я думаю, вы ищете это: http://stackoverflow.com/questions/562590/c-sharp-net-how-to-display-a-message-in-the-output-window-without-being- in-debu –

+0

Еще раз спасибо, но это не сработало для меня. Трассировка не выводится без режима отладки, даже если определена константа TRACE. –

39
Debug.WriteLine 

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

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

Меню ИнструментыОпцииОтладочные → снимите Отправить Вывод на Immediate.

+1

Возможно, Debug.Write() не вставляет возврат каретки, поэтому сообщения буферизуются? –

+0

не уверен, что я пропустил читать вопрос –

+1

Я не видел Debug.WriteLine («String»), пока не сделал то, что сказал Мика. 'Инструменты | Параметры | Отладка снимите флажок Отправить вывод в Immediate' – Skindeep2366

14

Вы можете искать

MessageBox.Show() 

или

Debug.Writeline() 
+5

'MessageBox.Show()' может быть очень неприятным, если вы хотите написать несколько значений для целей отладки. – Dementic

+0

Вопрос: «Запись в окно вывода Visual Studio?» а не в поле сообщения. –

+0

@AmirTwito Поле сообщения представляет собой окно вывода. – ProfK

108

Это будет записывать вывод отладочной окна:

using System.Diagnostics; 

Debug.WriteLine("Send to debug output."); 
+1

Для меня это «выводит» в окно «Немедленное» – nuander

+0

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

+0

Это делает вывод в окно Debug, однако, только после закрытия веб-страницы. Я хотел бы немедленно отобразить, когда я выполняю код. Подождите минуту - я обнаружил, что окно вывода скрыто во время выполнения кода. Если я покажу окно, мой выход будет там. –

61

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

System.Diagnostics.Debug.WriteLine("your message here"); 
16

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

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

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

+2

Я использую VS 2013 Professional и пытаюсь получить выход из единичного теста с использованием модульной тестовой среды Visual Studio. Кажется, тестовая жгута фиксирует и перенаправляет Debug.WriteLine, но не Trace.WriteLine. И вы не увидите вывод Trace, если вы не отлаживаете тесты (а не просто запускаете их). – yoyo

0

печати к выходному окну Visual Studio:

Debug.Writeline(); 
4

Вызов

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

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

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

+0

Итак, Debug.WriteLine(), Console.WriteLine() и Trace.WriteLine() не выводят ничего в Output for .Net Core? Любой способ использовать какой-то простой журнал, не записывая Logclass?Выполните поиск в разделе «Инструменты»> «Параметры»> «Отладка» и отметьте «Показать вывод из:» для возможных решений. –

0

Следующие работал для меня в Visual Studio 2015:

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

Прочитайте документацию OutputDebugStringW here.

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

+1

Является ли это C++? Вопрос помечен тегом [tag: C#]. – jpmc26

0

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

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

> Debug.Print <item> 

    id: 1 
    idt: null 
    igad: 99 
    igbd: 99 
    gl_desc: "New #20" 
    te_num: "1-001-001-020" 
2

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

Сначала вам необходимо установить Serilog's Trace sink. После установки, вы должны настроить регистратор так:.

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

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

Тогда вы просто журнал сообщений, как правило, и они отображаются в окне Output:.

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

Serilog теперь также имеет «отладочную» раковину на https://github.com/serilog/serilog-sinks-debug, которая работает аналогичным образом, но имеет немного более приятное форматирование :-) HTH! –

+0

.... Я действительно смущен о нисходящем. – jpmc26

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