本文共 8609 字,大约阅读时间需要 28 分钟。
在一节中介绍的步骤演示了如何创建使用 Debug 类以提供有关程序执行信息的控制台应用程序。 当程序运行时,您可以使用 Debug 类的方法来生成消息,以帮助您监视程序执行顺序、检测故障或提供性能度量信息。默认情况下, Debug 类产生的消息显示在 Visual Studio 集成开发环境 (IDE) 的“输出”窗口中。 该代码示例使用 WriteLine 方法生成后面带有行结束符的消息。当您使用此方法生成消息时,每条消息在“输出”窗口中均显示为单独的一行。 如果使用 Debug 类的 Assert 方法,那么只有在指定条件计算为 false 时,“输出”窗口才显示消息。该消息还在一个模式对话框中向用户显示。该对话框包括消息、项目名和 Debug.Assert 语句编号。该对话框还包括下列三个命令按钮:using System.Diagnostics;
string sProdName = "Widget";int iUnitQty = 100;double dUnitCost = 1.03;
Debug.WriteLine("Debug Information-Product Starting ");
Debug.Indent();
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());
System.Xml.XmlDocument oxml = new System.Xml.XmlDocument();Debug.WriteLine(oxml);
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");
Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear");Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear");
Debug.Assert(dUnitCost > 1, "Message will NOT appear");Debug.Assert(dUnitCost < 1, "Message will appear since dUnitcost < 1 is false");
TextWriterTraceListener tr1 = new TextWriterTraceListener(System.Console.Out);Debug.Listeners.Add(tr1); TextWriterTraceListener tr2 = new TextWriterTraceListener(System.IO.File.CreateText("Output.txt"));Debug.Listeners.Add(tr2);
Debug.Unindent();Debug.WriteLine("Debug Information-Product Ending");
Debug.Flush();
使用 Trace 类
您还可以使用 Trace 类生成监视应用程序执行的消息。Trace 和 Debug 类共享大多数相同的方法来生成输出,这些方法包括:
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();
确认它可以使用
<script type=text/javascript> loadTOCNode(2, 'summary'); </script> - 确保 Debug 是当前的解决方案配置。
- 如果“解决方案资源管理器”窗口不可见,请按 CTRL+ALT+L 组合键以显示此窗口。
- 右键单击“conInfo”,然后单击“属性”。
- 在 conInfo 属性页左窗格中,在“配置”文件夹下,请确保箭头指向“调试”。
- 在“配置”文件夹上面的“配置”下拉列表框中,单击“活动(调试)”或“调试”,然后单击“确定”。
- 按 CTRL+ALT+O 以显示“输出”窗口。
- 按 F5 键以运行该代码。在出现“断言失败”对话框时,单击“忽略”。
- 在“控制台”窗口中,按 ENTER 键。此时程序即已完成,“输出”窗口应显示以下输出:
Debug Information-Product Starting The product name is Widget The available units on hand are100 The per unit cost is 1.03 System.Xml.XmlDocument Field: The product name is Widget Field: The units on hand are100 Field: The per unit cost is1.03 Calc: Total Cost is 103 This message WILL appear ---- DEBUG ASSERTION FAILED -------- Assert Short Message ----Message will appear since dUnitcost < 1 is false---- Assert Long Message ---- at Class1.Main(String[] args) <%Path%>/class1.cs(34) The product name is Widget The available units on hand are100 The per unit cost is 1.03Debug Information-Product EndingTrace Information-Product Starting The product name is Widget Field: The product name isWidget This message WILL appearTrace Information-Product Ending
- “控制台”窗口和 Output.txt 文件应显示以下输出:
The product name is Widget The available units on hand are 100 The per unit cost is 1.03Debug Information-Product EndingTrace Information-Product Starting The product name is Widget Field: The product name is Widget This message WILL appearTrace Information-Product Ending
注意:Output.txt 文件与 conInfo 可执行文件 (conInfo.exe) 位于同一目录中。通常情况下,该目录是存储项目源的 /bin 文件夹,默认情况下为 C:/Documents and Settings/User login/My Documents/Visual Studio Projects/conInfo/bin。
完整代码列表
<script type=text/javascript> loadTOCNode(2, 'summary'); </script> using System; using System.Diagnostics; class Class1 { [STAThread] static void Main(string[] args) { string sProdName = "Widget"; int iUnitQty = 100; double dUnitCost = 1.03; Debug.WriteLine("Debug Information-Product Starting "); Debug.Indent(); 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()); System.Xml.XmlDocument oxml = new System.Xml.XmlDocument(); Debug.WriteLine(oxml); 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"); Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear"); Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear"); Debug.Assert(dUnitCost > 1, "Message will NOT appear"); Debug.Assert(dUnitCost < 1, "Message will appear since dUnitcost < 1 is false"); TextWriterTraceListener tr1 = new TextWriterTraceListener(System.Console.Out); Debug.Listeners.Add(tr1); TextWriterTraceListener tr2 = new TextWriterTraceListener(System.IO.File.CreateText("Output.txt")); Debug.Listeners.Add(tr2); Debug.WriteLine("The product name is "+sProdName); Debug.WriteLine("The available units on hand are"+iUnitQty); Debug.WriteLine("The per unit cost is "+dUnitCost); Debug.Unindent(); Debug.WriteLine("Debug Information-Product Ending"); Debug.Flush(); 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(); } }
注意:要使此代码示例发挥作用,必须通过将 using System.Diagnostics; 粘贴为第一行代码来添加 System.Diagonstics 名称空间。 疑难解答
<script type=text/javascript> loadTOCNode(2, 'summary'); </script>
- 如果解决方案配置类型是 Release,则会忽略 Debug 类输出。
- 在为特定目标创建 TextWriterTraceListener 类后,TextWriterTraceListener 会从 Trace 类和 Debug 类接收输出。无论您是否使用Trace 或 Debug 类的 Add 方法将 TextWriterTraceListener 添加到 Listeners 类,都会出现这种情况。
- 如果将同一目标的 Listeners 对象添加到 Trace 类和 Debug 类中,则无论是 Debug 类还是 Trace 类生成输出,各行输出都会重复出现。
TextWriterTraceListener myWriter = new TextWriterTraceListener(System.Console.Out); Debug.Listeners.Add(myWriter); TextWriterTraceListener myCreator = new TextWriterTraceListener(System.Console.Out); Trace.Listeners.Add(myCreator);
转载地址:http://czupi.baihongyu.com/