web-dev-qa-db-ja.com

デバッグ中にConsole.Write ...メソッドをVisual Studioの出力ウィンドウにリダイレクトする

コンソールアプリケーションVisual Studioのプロジェクトから、デバッグ中にConsoleの出力を出力ウィンドウにリダイレクトしたいと思います。

33
AMissico

デバッグする前に、アプリケーションタイプをWindowsに変更します。コンソールウィンドウがない場合、Console.WriteLineはTrace.WriteLineのように機能します。デバッグ後、アプリケーションをコンソールタイプにリセットすることを忘れないでください。

27
Alex F
    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");
        }
    }

**これは、ほぼ疑似コードにまとめられていることに注意してください。それは動作しますが、作業が必要です:) **

17
dkackman

これをSystem.Diagnostics.Debug.Write();に変更できます。

4
Niike2

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; }
    }
}
3
ivanatpr

Trace.Writeを試してDebugViewを使用する

0
TobyEvans

ありがとう、Alex F、Niceソリューションですが、私のプロジェクトはcmakeによって作成されたため、うまくいきませんでした。したがって、Alex Fが提案したように、WIN32またはMACOSX_BUNDLEadd_executable に追加します。

add_executable(target_name WIN32 <source list>)

または、CMakeList.txtを編集できない場合は、_ -DCMAKE_WIN32_EXECUTABLE=1cmake configureコマンドに追加できます。

0
mr NAE