Where does System.Diagnostics.Debug.Write output appear?
Asked Answered
A

8

172

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.

Argumentum answered 21/7, 2009 at 15:1 Comment(1)
as mentioned at some comment in another reply, can use Microsoft's (SysInternals) DebugView: technet.microsoft.com/en-us/sysinternals/bb896647.aspxRoundel
F
83

As others have pointed out, listeners have to be registered in order to read these streams. Also note that Debug.Write will only function if the DEBUG build flag is set, while Trace.Write will only function if the TRACE build flag is set.

Setting the DEBUG and/or TRACE flags is easily done in the project properties in Visual Studio or by supplying the following arguments to csc.exe

/define:DEBUG;TRACE

Fossil answered 21/7, 2009 at 15:10 Comment(4)
It was useful (didn't expect that) for me to find out that Debug and Trace objects use the same trace listeners, therefore, both Debug.Write and Trace.Write output to the same place(s), it is just that depending on conditions they might not get executedPeeress
could you elaborate on what conditions they are? exactly which situation a debug.Write will not work the same as a trace.write?Galvanize
this doesnt work for me, i have debug and trace flags set in vs project properties, and am using Debug.WriteLine, the line executes, but nothing appears in the output window, anyone got any other advise?Microclimatology
To expand on @Peeress comment, see learn.microsoft.com/en-us/dotnet/api/…Zebedee
A
131

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".

Almaraz answered 21/7, 2009 at 15:15 Comment(1)
I would like to confirm that (Ctrl + Alt + O) will bring up the output window while debugging in Visual Studio 2012Shipley
F
83

As others have pointed out, listeners have to be registered in order to read these streams. Also note that Debug.Write will only function if the DEBUG build flag is set, while Trace.Write will only function if the TRACE build flag is set.

Setting the DEBUG and/or TRACE flags is easily done in the project properties in Visual Studio or by supplying the following arguments to csc.exe

/define:DEBUG;TRACE

Fossil answered 21/7, 2009 at 15:10 Comment(4)
It was useful (didn't expect that) for me to find out that Debug and Trace objects use the same trace listeners, therefore, both Debug.Write and Trace.Write output to the same place(s), it is just that depending on conditions they might not get executedPeeress
could you elaborate on what conditions they are? exactly which situation a debug.Write will not work the same as a trace.write?Galvanize
this doesnt work for me, i have debug and trace flags set in vs project properties, and am using Debug.WriteLine, the line executes, but nothing appears in the output window, anyone got any other advise?Microclimatology
To expand on @Peeress comment, see learn.microsoft.com/en-us/dotnet/api/…Zebedee
A
52

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.

Atlee answered 21/7, 2009 at 15:3 Comment(3)
Apparently DebugView will capture both the .NET Debug.Write() and Win32 OutputDebugString(): technet.microsoft.com/en-us/sysinternals/bb896647Stool
@dlchambers: I don't think that's correct. That page claims display of OutputDebugString() and (kernel) DbgPrint().Systematic
@dlchambers: I withdraw the comment; I discovered that DebugView can capture Debug.Write() if its Capture settings include "Global Win32" -- which requires running it in Admin mode.Systematic
T
13

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

Turfy answered 21/7, 2009 at 15:3 Comment(0)
F
7

The Diagnostics messages are displayed in the Output Window.

Frustum answered 21/7, 2009 at 15:3 Comment(0)
B
5

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 (DebugWindowImmediate).

Bowleg answered 14/1, 2015 at 12:21 Comment(0)
D
2

The solution for my case is:

  1. Right click the output window;
  2. Check the 'Program Output'
Dispensation answered 15/12, 2016 at 22:21 Comment(0)
V
1

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 ViewOutput 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.

Verulamium answered 13/4, 2016 at 6:54 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.