Где появляется вывод System.Diagnostics.Debug.Write? - PullRequest
134 голосов
/ 21 июля 2009

Следующая программа на C # (построенная с csc hello.cs) печатает только Hello via Console! на консоли и Hello via OutputDebugString в окне DebugView. Однако я не вижу ни одного из вызовов System.Diagnostics.*. Почему это так?

using System;
using System.Runtime.InteropServices;
class Hello {
    [DllImport("kernel32.dll", CharSet=CharSet.Auto)]
    public static extern void OutputDebugString(string message);

    static void Main() {
        Console.Write( "Hello via Console!" );
        System.Diagnostics.Debug.Write( "Hello via Debug!" );
        System.Diagnostics.Trace.Write( "Hello via Trace!" );
        OutputDebugString( "Hello via OutputDebugString" );
    }
}

Может быть, для csc? 1009 * требуются специальные переключатели командной строки?

Я не использую Visual Studio для какой-либо своей разработки, это чисто командная строка.

Ответы [ 8 ]

107 голосов
/ 21 июля 2009

Во время отладки System.Diagnostics.Debug.WriteLine отобразится в окне вывода ( Ctrl + Alt + O ), вы также можете добавить TraceListener к Debug.Listeners коллекция для указания Debug.WriteLine вызовов для вывода в другие местоположения.

Примечание. Debug.WriteLine вызовы могут не отображаться в окне вывода, если в меню Инструменты Параметры выбрана опция Visual Studio «Перенаправить весь текст окна вывода в окно немедленного действия». Отладка Общие . Чтобы отобразить « Инструменты Параметры Отладка », установите флажок рядом с « Инструменты Параметры Показать все настройки".

71 голосов
/ 21 июля 2009

Как уже отмечали другие, слушатели должны быть зарегистрированы, чтобы читать эти потоки. Также обратите внимание, что Debug.Write будет работать только при установленном флаге сборки DEBUG, а Trace.Write будет работать только при установленном флаге сборки TRACE.

Установка флагов DEBUG и / или TRACE легко выполняется в свойствах проекта в Visual Studio или путем предоставления следующих аргументов в csc.exe

/define:DEBUG;TRACE

41 голосов
/ 21 июля 2009

Вам нужно добавить TraceListener, чтобы они появились на консоли.

TextWriterTraceListener writer = new TextWriterTraceListener(System.Console.Out);
Debug.Listeners.Add(writer);

Они также появляются в окне вывода Visual Studio в режиме отладки.

9 голосов
/ 21 июля 2009

Во время отладки в Visual Studio откройте окно «Вывод» («Просмотр»> «Вывод»). Это покажет там.

5 голосов
/ 21 июля 2009
3 голосов
/ 14 января 2015

Когда я пишу debug.write ("") в коде, он выводится в "Немедленное окно", а не "Окно вывода".

Вы можете попробовать это. Для отображения окна «Немедленно» ( Отладка Окно Немедленно ).

2 голосов
/ 16 декабря 2016

Решение для моего случая:

  1. Щелкните правой кнопкой мыши окно вывода;
  2. Проверьте «Вывод программы»
0 голосов
/ 13 апреля 2016

Для VB.NET действует следующее. Вы должны выбрать «Debug» и убедиться, что вы «Start Debugging». Это может быть достигнуто нажатием F5 .

Кроме того, Console.WriteLine будет отображать сообщения только при построении как «Release» в вашем окне вывода.

Как упоминалось ранее, откройте окно «Вывод» с помощью Просмотр Вывод И убедитесь, что вы выбрали либо «Построить», если хотите видеть сообщения Console.WriteLine, либо «Отладку», если вы хотите видеть сообщения Debug.WriteLine или Trace.WriteLine.

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