2012-02-20 3 views
20

При использованииDebug.WriteLine ничего не показывает

using System.Diagnostics; 

и

Debug.WriteLine("Test"); 

пробежав приложение, не "Test" можно увидеть на выходе. Но если я использую функцию msgbox вместо этого, появляется msgbox, поэтому линия будет достигнута.

Я смотрю в неправильном окне или что мне нужно изменить?

Я использую VC# Express.

+2

Что вы называете «выходом»? –

+1

, конечно, вы используете свое приложение внутри vs ide? правильно? – Steve

+1

@Henk Holterman Output, показать вывод с «debug» на самом нижнем. – Zurechtweiser

ответ

18

Есть две причины такого поведения

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

Самый простой способ диагностировать это изменить код

#if DEBUG 
Console.WriteLine("the message"); 
#endif 

Если он печатает, то у вас есть проблемы с следовых слушателей, иначе вы собираете в версии

+0

Я заменил Console.WriteLine («сообщение»); с MessageBox.Show («Это сообщение»); и это сработало, поэтому включен режим отладки. – Zurechtweiser

+0

Опция '--debug' компилятора Mono C# (' mcs --debug') генерирует только символы отладки в двоичном формате, но не устанавливает 'DEBUG', а не' TRACE'. Используйте 'mcs --debug -d: DEBUG -d: TRACE Program.cs' для' Debug.WriteLine() 'и связанные с работой. – Palec

2

Debug.WriteLine("Test"); должен отображаться в окне вывода, когда вы находитесь в режиме отладки. Если вы хотите отладить запущенное приложение (режим Release), вы можете использовать Trace, который будет отображаться в событиях Windows.

+0

, вот где я ищу. Вывод, выводить вывод из «debug» на самом нижнем уровне. – Zurechtweiser

+0

Я обновил ответ –

+2

@ Софьян, верно, что бы ни была проблема, вопрос не заслуживает нисходящего хода. Иногда бывает. – Steve

5

Я считаю, что «Debug.WriteLine()» записывается в коллекцию Listeners. Оттуда вы можете определить, где будет записываться отладочная информация. По умолчанию «Выход» должен быть там, где он появляется, но если у вас возникли проблемы с просмотром информации, тогда создайте другого слушателя, чтобы захватить информацию об отладке.

Вот пример MSDN:

TextWriterTraceListener myWriter = new TextWriterTraceListener(System.Console.Out); 
Debug.Listeners.Add(myWriter); 
+0

Это правильно, у меня был в моей конфигурации, который останавливал этот – Sam

+0

. Я выбрал 'System.Console.Error' вместо' System.Console.Out'. Отладочные сообщения не должны быть неразрывно связаны с фактическим результатом; перенаправление вывода позволяет мне разделить их в моей настройке. – Palec

+0

['ConsoleTraceListener'] (https://msdn.microsoft.com/en-us/library/system.diagnostics.consoletracelistener.aspx) является минималистическим подклассом' TextWriterTraceListener', который просто предоставляет конструкторы для удобной инициализации для стандартных потоковых писателей : 'new ConsoleTraceListener()' использует 'Console.Out',' new ConsoleTraceListener (true) 'использует' Console.Error'. [См. Его источник.] (Https://referencesource.microsoft.com/#System/compmod/system/diagnostics/ConsoleTraceListener.cs) BTW, позже 'Console.SetOut()' и 'Console.SetError()' вызывает do не влияют на них. – Palec

3

Я не уверен, кто-то упомянул об этой причине, но если я скомпилирую в режиме Debug, а затем просто запустим программу (Ctrl + F5) вместо выбора «Начать отладку» (F5), я тоже не увижу Debug.WriteLine.

Так что не достаточно просто скомпилировать в режиме отладки, вы также должны активно отладить программу, а не просто запустить :)

+2

Исправить. У вас должен быть отладчик «прикреплен» –

54

Меню> Сервис> Параметры> отладки> Общие:

  • Обеспечить «Перенаправить весь текст выходного окна в немедленном окне» НЕ проверяется

о свойствах проекта> Сложение:

  • Конфигурация: Debug
  • "Определение константы DEBUG" проверяется
  • "Определить СЛЕД константа" проверяется

В окне Output:

  • Показать выход из: Debug
  • Щелкните правой кнопкой мыши в окне вывода и убедитесь, что установлен «Программный выход»
+7

Почти год спустя, и этот ответ по-прежнему огромен. После того, как я не проверил «Переадресовать весь текст окна вывода в непосредственное окно», моя Debug.WriteLine («Текст»); начал работать. – Neill

+0

«Обеспечить» Перенаправление всего текста окна вывода в непосредственное окно «НЕ проверено» - это все, что я должен был сделать. Странно, как я не помню, чтобы делать это раньше, и это работает просто отлично. – eaglei22

+0

Фантастический !! Непонятно, почему «Переадресовать весь текст окна вывода в непосредственное окно» по умолчанию проверяется в vs2013. vs2015 - нет. Вот почему я всегда озадачивался, почему проекты показали следы в vs2015, но я ничего не видел в vs2013. – Louis

1

Ответ прост. Возможно, вы нажмете ctrl + F5, что означает запуск без отладки. Просто нажмите F5 на Start Debugging режим.

enter image description here

0

Для тех, кто погуглить: Хотя есть различные ответы, которые указывают на удаление слушателей в конфигурационном файле также следить за

<remove name="OPTIONSVerbHandler" /> 

в разделе

<handlers> 

Поскольку это также подавляет вывод отладки.

0

Если какой-либо из других ответов не работает. Попробуйте разместить точку останова в строке Debug.WriteLine и посмотреть, не ударило ли она.

В случае, если это не ударит, причина в том, что выполняется старая версия кода.

Чтобы исправить это, в первую очередь проверьте это

Source

Перейти к Tools-Options

Under Проекты и решения -> Build и Run выберите "Всегда строить" под «On Run , когда проекты устарели "

enter image description here

И Проверьте, очищены ли временные файлы.Проверьте это SO Question

Это сработало для меня.

Если даже это не удается, попробуйте перезагрузить VS. Работает большую часть времени.

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