[c#] Where does System.Diagnostics.Debug.Write output appear?

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.

This question is related to c# debugging

The answer is


For VB.NET the following applies. You have to select "Debug" AND make sure that you "Start Debugging". This can be reached by pressing F5.

Also the Console.WriteLine will only display messages when building as "Release" in your Output window.

As mentioned before, open the Output window with View ? Output AND make sure to select either "Build" if you want to see Console.WriteLine messages or "Debug" if you want to see Debug.WriteLine or Trace.WriteLine messages.


The solution for my case is:

  1. Right click the output window;
  2. Check the 'Program Output'

While you are debugging in Visual Studio, display the "Output" window (View->Output). It will show there.


The Diagnostics messages are displayed in the Output Window.


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 Tools ? Options ? Debugging ? General. To display "Tools ? Options ? Debugging", check the box next to "Tools ? Options ? Show All Settings".


When I write debug.write("") in the code, it outputs in the "Immediate window", not "Output window".

You can try it. For displaying the "Immediate" window (Debug ? Window ? Immediate).


You need to add a TraceListener to see them appear on the Console.

TextWriterTraceListener writer = new TextWriterTraceListener(System.Console.Out);
Debug.Listeners.Add(writer);

They also appear in the Visual Studio Output window when in Debug mode.