Перенаправить Console.Write ... Методы в окно вывода Visual Studio при отладке - PullRequest
32 голосов
/ 25 марта 2010

Из Консольного приложения проекта в Visual Studio я хочу перенаправить вывод Console в Окно вывода во время отладки.

Ответы [ 7 ]

27 голосов
/ 25 марта 2010

Измените тип приложения на Windows перед отладкой. Без окна консоли Console.WriteLine работает как Trace.WriteLine. Не забудьте сбросить приложение обратно в консольный тип после отладки.

17 голосов
/ 25 марта 2010
    class DebugWriter : TextWriter
    {        
        public override void WriteLine(string value)
        {
            Debug.WriteLine(value);
            base.WriteLine(value);
        }

        public override void Write(string value)
        {
            Debug.Write(value);
            base.Write(value);
        }

        public override Encoding Encoding
        {
            get { return Encoding.Unicode; }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
#if DEBUG         
            if (Debugger.IsAttached)
                Console.SetOut(new DebugWriter());   
#endif

            Console.WriteLine("hi");
        }
    }

** Обратите внимание, что это объединено почти в псевдокод. это работает, но нужно работать :) **

4 голосов
/ 25 марта 2010

Вы можете изменить его на System.Diagnostics.Debug.Write ();

3 голосов
/ 23 января 2013

Обратите внимание, что если вы используете метод dkackman, но хотите записать вывод в ОБЕ консольное окно и окно отладки, то вы можете слегка изменить его код следующим образом:

class DebugWriter : TextWriter
{
    //save static reference to stdOut
    static TextWriter stdOut = Console.Out;

    public override void WriteLine(string value)
    {
        Debug.WriteLine(value);
        stdOut.WriteLine(value);
        base.WriteLine(value);
    }

    public override void Write(string value)
    {
        Debug.Write(value);
        stdOut.Write(value);
        base.Write(value);
    }

    public override Encoding Encoding
    {
        get { return Encoding.Unicode; }
    }
}
0 голосов
/ 21 декабря 2018

Спасибо, Алекс Ф, хорошее решение, но у меня не получилось, потому что мой проект был создан cmake. Итак, чтобы сделать, как предложил Алекс Ф, добавьте WIN32 или MACOSX_BUNDLE к add_executable

add_executable(target_name WIN32 <source list>)

Или, если вы не можете редактировать CMakeList.txt, вы можете добавить -DCMAKE_WIN32_EXECUTABLE=1 в команду cmake configure.

0 голосов
/ 27 января 2012

На самом деле, есть самый простой способ: в окне «Параметры» Visual Studio (из меню «Инструменты») перейти в «Отладка», затем проверить параметр «Перенаправить весь текст окна вывода в окно немедленного действия».

0 голосов
/ 25 марта 2010

Попробуйте Trace.Write и используйте DebugView

...