wake-up-neo.com

Umleiten von Console.Write ... -Methoden während des Debugging in Visual Studio-Ausgabefenster

Aus einer Console-Anwendung Projekt in Visual Studio möchte ich die Ausgabe von Console beim Debuggen in das Output Window umleiten.

32
AMissico

Ändern Sie den Anwendungstyp vor dem Debuggen in Windows. Ohne Console-Fenster funktioniert Console.WriteLine wie Trace.WriteLine. Vergessen Sie nicht, die Anwendung nach dem Debuggen wieder auf den Konsolentyp zurückzusetzen.

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

** Beachten Sie, dass dies fast Pseudo-Code ist. es funktioniert aber muss funktionieren :) **

17
dkackman

Sie können es in System.Diagnostics.Debug.Write () ändern.

4
Niike2

Wenn Sie die Methode von dkackman verwenden, die Ausgabe jedoch sowohl in das Konsolenfenster als auch in das Debug-Fenster geschrieben werden sollen, können Sie seinen Code folgendermaßen ändern:

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

Versuchen Sie es mit Trace.Write und verwenden Sie DebugView

0
TobyEvans

Danke, Alex F, Schöne Lösung, hat aber nicht für mich funktioniert, weil mein Projekt von cmake erstellt wurde. Fügen Sie WIN32 oder MACOSX_BUNDLE zu add_executable hinzu, wie Alex F vorgeschlagen hat.

add_executable(target_name WIN32 <source list>)

Wenn Sie die CMakeList.txt nicht bearbeiten können, können Sie -DCMAKE_WIN32_EXECUTABLE=1 zum Befehl cmake configure hinzufügen.

0
mr NAE