web-dev-qa-db-fra.com

Rediriger les méthodes Console.Write ... vers la fenêtre de sortie de Visual Studio lors du débogage

À partir de Application console projet dans Visual Studio , je souhaite rediriger la sortie de Console vers la fenêtre Sortie pendant le débogage.

32
AMissico

Changez le type d'application en Windows avant le débogage. Sans fenêtre de console, Console.WriteLine fonctionne comme Trace.WriteLine. N'oubliez pas de réinitialiser l'application sur le type de console après le débogage.

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

** Notez que ceci est grossièrement assimilé presque à un pseudo-code. ça marche mais a besoin de travail :) **

17
dkackman

Vous pouvez le changer en System.Diagnostics.Debug.Write ();

4
Niike2

Notez que si vous utilisez la méthode de dkackman mais que vous voulez écrire la sortie dans les deux fenêtres de la console et de la fenêtre de débogage, vous pouvez légèrement modifier son code comme ceci:

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

Essayez Trace.Write et utilisez DebugView

0
TobyEvans

Merci, Alex F, solution intéressante, mais ne fonctionne pas pour moi, car mon projet a été créé par cmake. Donc, pour faire comme suggéré par Alex F, ajoutez WIN32 ou MACOSX_BUNDLE à add_executable

add_executable(target_name WIN32 <source list>)

Ou, si vous ne pouvez pas modifier le fichier CMakeList.txt, vous pouvez ajouter -DCMAKE_WIN32_EXECUTABLE=1 à la commande cmake configure.

0
mr NAE