C#跟踪和调试程序-Debug类使⽤
摘要:
怎样在 Visual C# .NET 中跟踪和调试?当程序运⾏时,您可以使⽤ Debug 类的⽅法来⽣成消息,以帮助您监视程序执⾏顺序、检测故障或提供性能度量信息。默认情况下,Debug 类产⽣的消息显⽰在 Visual Studio 集成开发环境 (IDE) 的“输出”窗⼝中。
如何使⽤ Debug
当程序运⾏时,您可以使⽤ Debug 类的⽅法来⽣成消息,以帮助您监视程序执⾏顺序、检测故障或提供性能度量信息。默认情况下,Debug 类产⽣的消息显⽰在 Visual Studio 集成开发环境 (IDE) 的“输出”窗⼝中。
该代码⽰例使⽤ WriteLine ⽅法⽣成后⾯带有⾏结束符的消息。当您使⽤此⽅法⽣成消息时,每条消息在“输出”窗⼝中均显⽰为单独的⼀⾏。
使⽤ Debug 类创建⼀个⽰例
1. 启动 Visual Studio .NET。
2. 新建⼀个名为 conInfo 的新 Visual C# .NET 控制台应⽤程序项⽬。将创建 Class1。
3. 在 Class1 的顶部添加以下名称空间。
using System.Diagnostics;
4. 要初始化变量以使其包含产品的相关信息,请将下⾯的声明语句添加到 Main ⽅法:
string sProdName = "Widget";
int iUnitQty = 100;
double dUnitCost = 1.03;
5. (就在上⾯代码后⾯)直接输⼊将类⽣成的消息指定为 WriteLine ⽅法的第⼀个输⼊参数。按 CTRL+ALT+O 组合键以确保“输出”窗⼝可见。Debug.WriteLine("Debug Information-Product Starting ");
6. 为了清晰易读,请使⽤ Indent ⽅法在“输出”窗⼝中缩进后⾯的消息:
Debug.Indent();
7. 要显⽰所选变量的内容,请使⽤ WriteLine ⽅法,如下所⽰:
Debug.WriteLine("The product name is " + sProdName);
Debug.WriteLine("The available units on hand are" + iUnitQty.ToString());
Debug.WriteLine("The per unit cost is " + dUnitCost.ToString());
8. 您还可以使⽤ WriteLine ⽅法显⽰现有对象的名称空间和类名称。例如,下⾯的代码在“输出”窗⼝中显⽰ System.Xml.XmlDocument 命名空间:System.Xml.XmlDocument oxml = new System.Xml.XmlDocument();
Debug.WriteLine(oxml);
9、要整理输出,可以包括⼀个类别作为 WriteLine ⽅法的第⼆个可选的输⼊参数。如果您指定⼀个类别,则“输出”窗⼝消息的格式为“类别:消息”。例如,以下代码的第⼀⾏在“输出”窗⼝中显⽰“Field:The product name is Widget”:
Debug.WriteLine("The product name is " + sProdName,"Field");
Debug.WriteLine("The units on hand are" + iUnitQty,"Field");
Debug.WriteLine("The per unit cost is" + dUnitCost.ToString(),"Field");
Debug.WriteLine("Total Cost is " + (iUnitQty * dUnitCost),"Calc");
10. 仅在使⽤ Debug 类的 WriteLineIf ⽅法将指定条件计算为 true 时,“输出”窗⼝才可以显⽰消息。将要计算的条件是 WriteLineIf ⽅法的第⼀个输⼊参数。WriteLineIf 的第⼆个参数是仅在第⼀个参数的条件计算为真时才显⽰的消息。
Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear");
Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear");
11. 使⽤ Debug 类的 Assert ⽅法,使“输出”窗⼝仅在指定条件计算为 false 时才显⽰消息:
Debug.Assert(dUnitCost > 1, "Message will NOT appear");
Debug.Assert(dUnitCost < 1, "Message will appear since dUnitcost < 1 is false");
12. 为“控制台”窗⼝ (tr1) 和名为 (tr2) 的⽂本⽂件创建 TextWriterTraceListener 对象,然后将每个对象添加到 Debug Listeners 集合中:TextWriterTraceListener tr1 = new TextWriterTraceListener(System.Console.Out);
Debug.Listeners.Add(tr1);
TextWriterTraceListener tr2 = new TextWriterTraceListener(System.IO.File.CreateText("d:/"));
//System.Diagnostics.TextWriterTraceListener tr2 = new System.Diagnostics.TextWriterTraceListener(@"d:/");
//System.Diagnostics.TextWriterTraceListener tr2 = new System.Diagnostics.TextWriterTraceListener(@"");
Debug.Listeners.Add(tr2);
说明:
tr1定义:将调试信息,即Debug输出通过控制台程序输出。
tr2定义,将调试信息,即Debug内容输出到⽂件,通常需要tr2.Flush()才能输出到⽂本⽂件,或者调⽤Debug.Flush(),将全部TextWriterTraceListener对象的调试缓冲输出。
不指定路径盘符,则输出的调试⽂件保存在程序的运⾏⽬录下。
13. 为了清晰易读,请使⽤ Unindent ⽅法去除 Debug 类为后续消息⽣成的缩进。当您将 Indent 和 Unindent 两种⽅法⼀起使⽤时,读取器可以将输出分成组。
Debug.Unindent();
Debug.WriteLine("Debug Information-Product Ending");
14. 为了确保每个 Listener 对象收到它的所有输出,请为 Debug 类缓冲区调⽤ Flush ⽅法:
Debug.Flush();
使⽤ Trace 类
您还可以使⽤ Trace 类⽣成监视应⽤程序执⾏的消息。Trace 和 Debug 类共享⼤多数相同的⽅法来⽣成输出,这些⽅法包括:
writeline输出数值变量◆WriteLine
◆WriteLineIf
◆Indent
◆Unindent
◆Assert
◆Flush
您可以在同⼀应⽤程序中分别或同时使⽤ Trace 和 Debug 类。在⼀个“调试解决⽅案配置”项⽬中,Trace 和 Debug 两种输出均为活动状态。该项⽬从这两个类为 Listener 对象⽣成输出。但是,“发布解决⽅案配置”项⽬仅从 Trace 类⽣成输出。该“发布解决⽅案配置”项⽬忽略任何 Debug 类⽅法调⽤。
Trace.WriteLine("Trace Information-Product Starting ");
Trace.Indent();
Trace.WriteLine("The product name is "+sProdName);
Trace.WriteLine("The product name is"+sProdName,"Field" );
Trace.WriteLineIf(iUnitQty > 50, "This message WILL appear");
Trace.Assert(dUnitCost > 1, "Message will NOT appear");
Trace.Unindent();
Trace.WriteLine("Trace Information-Product Ending");
Trace.Flush();
Console.ReadLine();
System.Diagnostics.Trace.WriteLine("Trace Log");
System.Diagnostics.Trace.Listeners.Clear();
System.Diagnostics.Trace.AutoFlush = true;
System.Diagnostics.Trace.Listeners.Add(new System.Diagnostics.TextWriterTraceListener("app.log"));
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论