Where does System.Diagnostics.Debug.Write output appear?

Frerich Raabe picture Frerich Raabe · Jul 21, 2009 · Viewed 193.6k times · Source

The following C# program (built with csc hello.cs) prints just Hello via Console! on the console and Hello via OutputDebugString in the DebugView window. However, I cannot see either of the System.Diagnostics.* calls. Why is that?

using System;
using System.Runtime.InteropServices;
class Hello {
    [DllImport("kernel32.dll", CharSet=CharSet.Auto)]
    public static extern void OutputDebugString(string message);

    static void Main() {
        Console.Write( "Hello via Console!" );
        System.Diagnostics.Debug.Write( "Hello via Debug!" );
        System.Diagnostics.Trace.Write( "Hello via Trace!" );
        OutputDebugString( "Hello via OutputDebugString" );
    }
}

Is there maybe some special command-line switches required for csc?

I'm not using Visual Studio for any of my development, this is pure commandline stuff.

Answer

boardernin picture boardernin · Jul 21, 2009

While debugging System.Diagnostics.Debug.WriteLine will display in the output window (Ctrl+Alt+O), you can also add a TraceListener to the Debug.Listeners collection to specify Debug.WriteLine calls to output in other locations.

Note: Debug.WriteLine calls may not display in the output window if you have the Visual Studio option "Redirect all Output Window text to the Immediate Window" checked under the menu ToolsOptionsDebuggingGeneral. To display "ToolsOptionsDebugging", check the box next to "ToolsOptionsShow All Settings".