重定向Console.Write ...调试时Visual Studio的输出窗口的方法

时间:2010-03-25 18:59:14

标签: visual-studio debugging console-application

Visual Studio 中的控制台应用程序项目,我想将Console的输出重定向到输出窗口,同时调试。

7 个答案:

答案 0 :(得分:27)

在调试之前将应用程序类型更改为Windows。如果没有Console窗口,Console.WriteLine就像Trace.WriteLine一样工作。调试后不要忘记将应用程序重置为Console类型。

答案 1 :(得分:17)

    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");
        }
    }
**请注意,这几乎是伪代码。它有效,但需要工作:) **

答案 2 :(得分:4)

您可以将其更改为System.Diagnostics.Debug.Write();

答案 3 :(得分:3)

注意如果您使用的是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; }
    }
}

答案 4 :(得分:0)

尝试使用Trace.Write并使用DebugView

答案 5 :(得分:0)

谢谢Alex F,很好的解决方案,但对我不起作用,因为我的项目是由cmake创建的。因此,按照Alex F的建议,将WIN32MACOSX_BUNDLE添加到add_executable

add_executable(target_name WIN32 <source list>)

或者,如果您无法编辑CMakeList.txt,则可以将-DCMAKE_WIN32_EXECUTABLE=1添加到cmake configure命令中。

答案 6 :(得分:-2)

实际上,有一种最简单的方法:在Visual Studio的“选项”窗口中(从“工具”菜单),转到“调试”,然后选中“将所有输出窗口文本重定向到立即窗口”选项。