[Mono-list] System.Diagnostics.Debug Output

Jonathan Pryor jonpryor@vt.edu
Thu, 01 Jan 2004 18:07:26 -0500


Debug and Trace output are somewhat platform specific.  By default on
Windows, messages are generated with the OutputDebugString Win32 API, so
the messages are visible (a) inside a debugger, and (b) with the
SysInternals.com DebugView utility program.  By default on Unix,
messages are sent to /dev/null (i.e. ignored).

For more control, set the MONO_TRACE environment variable.  The syntax
of possible values is:

	MONO_TRACE := <builtin-location> | <file-name>

	<builtin-location> :=
		( "Console.Out" | "Console.Error" ) [ ':' <prefix> ]?

	<prefix> := any string of characters

	<file-name> := any valid file name

At least, that's my fast effort for the accepted BNF-like grammar.

For example, to send all messages to standard output (/dev/stdout):

	export MONO_TRACE=Console.Out

For standard error (/dev/stderr):

	export MONO_TRACE=Console.Error

If you want to more easily distinguish between your normal program
output and the messages generated via the Debug and Trace classes, use a
"prefix".  The prefix is printed out before the actual message, and is
separated from the location by a ':':

	export MONO_TRACE="Console.Out:++++ "

Alternatively, you can send all messages to a filename:

	export MONO_TRACE=/tmp/my-file-name.txt

Finally, you can use the program's .config file to specify a file to
write messages to:

	<?xml version="1.0" encoding="UTF-8"?>
	<configuration>
		<system.diagnostics>
			<assert assertuienabled="false" 
				logfilename="MY-FILE-NAME.txt"/>
		</system.diagnostics>
	</configuration>

Set (XPath) /configuration/system.diagnostics/assert/@logfilename to the
filename to send messages to.  This is used IN ADDITION TO the filename
specified in MONO_TRACE, if present.

The above is the extent of the DefaultTraceListener support.  You can
always add your own trace listener to send messages to alternate
sources, using a (XPath)
/configuration/system.diagnostics/trace/listeners/add element:

	<?xml version="1.0" encoding="UTF-8"?>
	<configuration>
	  <system.diagnostics>
	    <trace>
	      <listeners>
	        <!-- beware line wrap in @type value -->
	        <add name="some-unique-name"
		  type="System.Diagnostics.TextWriterTraceListener, System,
Version=1.0.03300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
	          initializeData="MY-FILE-NAME.txt"
	        />
	      </listeners>
	    </trace>
	  </system.diagnostics>
	</configuration>

(XPath)
/configuration/system.diagnostics/trace/listeners/add/@initializeData
contains the value to pass to the constructor of the type specified in
@type, which is a filename for TextWriterTraceListener.

@type should be on one line; it's so long because .NET requires all that
information to find & load the correct type.  Mono doesn't currently
require all that, so "System.Diagnostics.TextWriterTraceListener,
System" would suffice for @type on Mono.

This mechanism can also be used to add arbitrary TraceListeners of your
own creation, if you wish.  The syntax is the same, just use the
appropriate @type value.

 - Jon

On Thu, 2004-01-01 at 17:27, GUSTAVO GARCIA BERNARDO wrote:
> Hello,
> 
>     How can i enable the System.Diagnostics.Debug class Output?
>     I compile with "mcs --define DEBUG ...." but i don't know where the debug output goes if it is being generated.
> 
> (I'm using Mono version 0.29 under Linux)
> 
> Thank you for your help.
> 
> G.
> 
> _______________________________________________
> Mono-list maillist  -  Mono-list@lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-list