Csharp/CSharp Tutorial/Development/Debug
Содержание
Add Console.Out to TextWriterTraceListener
<source lang="csharp">#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()"); }
}</source>
Starting Main() Fail: 1==2 Exiting Main()
Add EventLogTraceListener to Debug.Listener
<source lang="csharp">#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(); }
}</source>
Debug and Trace Output
<source lang="csharp">// 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(); }
}</source>
Debug Assert
<source lang="csharp">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"); }
}</source>
Set up a TraceListener to a file
<source lang="csharp">#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(); }
}</source>
Using Switches to Control Debug and Trace: BooleanSwitch
<source lang="csharp">// 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(); }
}</source>
Using Switches to Control Debug and Trace: TraceSwitch
<source lang="csharp">// 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(); }
}</source>