Материал из .Net Framework эксперт
Add Console.Out to TextWriterTraceListener
#define DEBUG
using System;
using System.Globalization;
using System.Diagnostics;
class MainClass
{
public static void Main()
{
TextWriterTraceListener tl = new TextWriterTraceListener(Console.Out);
Debug.Listeners.Add(tl);
Debug.WriteLine("Starting Main()");
Debug.Assert(1 == 2, "1==2");
Debug.WriteLine("Exiting Main()");
}
}
Starting Main()
Fail: 1==2
Exiting Main()
Add EventLogTraceListener to Debug.Listener
#define DEBUG
using System;
using System.Globalization;
using System.Diagnostics;
class MainClass
{
public static void Main()
{
TextWriterTraceListener tl = new TextWriterTraceListener("Example21_12.txt");
Debug.Listeners.Add(tl);
EventLogTraceListener t2 = new EventLogTraceListener("Application");
Debug.Listeners.Add(t2);
Debug.WriteLine("Starting Main()");
Debug.Assert(1 == 2, "1 ==2");
Debug.WriteLine("Exiting Main()");
Debug.Flush();
Debug.Close();
}
}
Debug and Trace Output
// compile with: csc /r:system.dll file_1.cs
using System;
using System.Diagnostics;
class MyClass
{
[Conditional("DEBUG")]
public void VerifyState()
{
Debug.Assert(2 == 0, "Bad State");
}
}
class MainClass
{
public static void Main()
{
Debug.Listeners.Clear();
Debug.Listeners.Add(new TextWriterTraceListener(Console.Out));
MyClass c = new MyClass();
c.VerifyState();
c.VerifyState();
}
}
Debug Assert
using System;
using System.Diagnostics;
using System.Collections;
using System.Data;
using System.Text;
public class MainClass{
public static void Main(){
Debug.Assert(1 == 0,"Error!","Error: 1 == 0");
}
}
Set up a TraceListener to a file
#define DEBUG
using System;
using System.Globalization;
using System.Diagnostics;
class MainClass
{
public static void Main()
{
TextWriterTraceListener tl = new TextWriterTraceListener("Example21_12.txt");
Debug.Listeners.Add(tl);
EventLogTraceListener t2 = new EventLogTraceListener("Application");
Debug.Listeners.Add(t2);
Debug.WriteLine("Starting Main()");
Debug.Assert(1 == 2, "1 ==2");
Debug.WriteLine("Exiting Main()");
Debug.Flush();
Debug.Close();
}
}
Using Switches to Control Debug and Trace: BooleanSwitch
// compile with: csc /D:DEBUG /r:system.dll boolean.cs
using System;
using System.Diagnostics;
class MyClass
{
public MyClass(int i)
{
this.i = i;
}
[Conditional("DEBUG")]
public void VerifyState()
{
Debug.WriteLineIf(debugOutput.Enabled, "VerifyState Start");
if (debugOutput.Enabled)
Debug.WriteLine("VerifyState End");
}
BooleanSwitch debugOutput = new BooleanSwitch("MyClassDebugOutput", "Control debug output");
int i = 0;
}
class MainClass
{
public static void Main()
{
Debug.Listeners.Clear();
Debug.Listeners.Add(new TextWriterTraceListener(Console.Out));
MyClass c = new MyClass(1);
c.VerifyState();
}
}
Using Switches to Control Debug and Trace: TraceSwitch
// compile with: csc /r:system.dll file_1.cs
using System;
using System.Diagnostics;
class MyClass
{
public MyClass(int i)
{
this.i = i;
}
[Conditional("DEBUG")]
public void VerifyState()
{
Debug.WriteLineIf(debugOutput.TraceInfo, "VerifyState Start");
Debug.WriteLineIf(debugOutput.TraceVerbose, "Starting field verification");
if (debugOutput.TraceInfo)
Debug.WriteLine("VerifyState End");
}
static TraceSwitch debugOutput = new TraceSwitch("MyClassDebugOutput", "Control debug output");
int i = 0;
}
class MainClass
{
public static void Main()
{
Debug.Listeners.Clear();
Debug.Listeners.Add(new TextWriterTraceListener(Console.Out));
MyClass c = new MyClass(1);
c.VerifyState();
}
}