关闭

在Visual C# .NET中跟踪和调试

发表于:2009-8-19 10:49

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:网络转载

#
DotNet

  本文介绍如何使用Debug和Trace类。Microsoft.NETFramework中提供了这两个类。在应用程序开发期间或部署到产品后,可以使用这两个类提供有关应用程序性能的信息。这两个类只是.NETFramework中所提供配置功能的一部分。

  要求下面的列表概括了推荐的硬件、软件、网络结构以及所需的ServicePack:

  • MicrosoftWindows2000或MicrosoftWindowsXP
  • MicrosoftVisualC#.NET

  本文还假定您熟悉程序调试。

  方法说明

  在使用Debug类创建一个示例一节中介绍的步骤演示了如何创建使用Debug类以提供有关程序执行信息的控制台应用程序。

  当程序运行时,您可以使用Debug类的方法来生成消息,以帮助您监视程序执行顺序、检测故障或提供性能度量信息。默认情况下,Debug类产生的消息显示在VisualStudio集成开发环境(IDE)的“输出”窗口中。

  该代码示例使用WriteLine方法生成后面带有行结束符的消息。当您使用此方法生成消息时,每条消息在“输出”窗口中均显示为单独的一行。

  如果使用Debug类的Assert方法,那么只有在指定条件计算为false时,“输出”窗口才显示消息。该消息还在一个模式对话框中向用户显示。该对话框包括消息、项目名和Debug.Assert语句编号。该对话框还包括下列三个命令按钮:

  • 终止:应用程序停止运行。
  • 重试:应用程序进入调试模式。
  • 忽略:应用程序继续。

  用户必须先单击这些按钮中的一个,然后应用程序才可以继续。

  您还可以指示从Debug类向“输出”窗口以外的目标进行输出。Debug类有一个名为Listeners的集合,该集合包括一些Listener对象。

  每个Listener对象都监视Debug输出并使输出指向指定的目标。

  Listener集合中的每个Listener都接收Debug类生成的任何输出。请使用TextWriterTraceListener类定义Listener对象。可以通过TextWriterTraceListener类的构造函数为该类指定目标。

  一些可能的输出目标包括:?使用System.Console.Out属性指定“控制台”窗口作为输出目标。

  使用System.IO.File.CreateText("FileName.txt")语句指定文本文件(.txt)作为输出目标。

  创建TextWriterTraceListener对象后,必须将该对象添加到Debug.Listeners集合才可接收调试输出。

  使用Debug类创建一个示例1.启动VisualStudio.NET。

  2.新建一个名为conInfo的新VisualC#.NET控制台应用程序项目。将创建Class1。

  3.在Class1的顶部添加以下名称空间。

  usingSystem.Diagnostics;

  4.要初始化变量以使其包含产品的相关信息,请将下面的声明语句添加到Main方法:

  stringsProdName="Widget";

  intiUnitQty=100;

  doubledUnitCost=1.03;

  5.将类生成的消息指定为WriteLine方法的第一个输入参数。按CTRL+ALT+O组合键以确保“输出”窗口可见。

  Debug.WriteLine("DebugInformation-ProductStarting");

  6.为了清晰易读,请使用Indent方法在“输出”窗口中缩进后面的消息:

  Debug.Indent();

  7.要显示所选变量的内容,请使用WriteLine方法,如下所示:

  Debug.WriteLine("Theproductnameis"+sProdName);

  Debug.WriteLine("Theavailableunitsonhandare"+iUnitQty.ToString());

  Debug.WriteLine("Theperunitcostis"+dUnitCost.ToString());

  8.您还可以使用WriteLine方法显示现有对象的名称空间和类名称。例如,下面的代码在“输出”窗口中显示System.Xml.XmlDocument命名空间:

  System.Xml.XmlDocumentoxml=newSystem.Xml.XmlDocument();

  Debug.WriteLine(oxml);

  9.要整理输出,可以包括一个类别作为WriteLine方法的第二个可选的输入参数。如果您指定一个类别,则“输出”窗口消息的格式为“类别:消息”。例如,以下代码的第一行在“输出”窗口中显示“Field:TheproductnameisWidget”:

  Debug.WriteLine("Theproductnameis"+sProdName,"Field");

  Debug.WriteLine("Theunitsonhandare"+iUnitQty,"Field");

  Debug.WriteLine("Theperunitcostis"+dUnitCost.ToString(),"Field");

  Debug.WriteLine("TotalCostis"+(iUnitQty*dUnitCost),"Calc");

  10.仅在使用Debug类的WriteLineIf方法将指定条件计算为true时,“输出”窗口才可以显示消息。将要计算的条件是WriteLineIf方法的第一个输入参数。WriteLineIf的第二个参数是仅在第一个参数的条件计算为真时才显示的消息。

  Debug.WriteLineIf(iUnitQty>50,"ThismessageWILLappear");

  Debug.WriteLineIf(iUnitQty<50,"ThismessagewillNOTappear");

  11.使用Debug类的Assert方法,使“输出”窗口仅在指定条件计算为false时才显示消息:

  Debug.Assert(dUnitCost>1,"MessagewillNOTappear");

  Debug.Assert(dUnitCost<1,"MessagewillappearsincedUnitcost<1isfalse");

  12.为“控制台”窗口(tr1)和名为Output.txt(tr2)的文本文件创建TextWriterTraceListener对象,然后将每个对象添加到DebugListeners集合中:

  TextWriterTraceListenertr1=newTextWriterTraceListener(System.Console.Out);

  Debug.Listeners.Add(tr1);

  TextWriterTraceListenertr2=newTextWriterTraceListener(System.IO.File.CreateText("Output.txt"));

  Debug.Listeners.Add(tr2);

  13.为了清晰易读,请使用Unindent方法去除Debug类为后续消息生成的缩进。

  当您将Indent和Unindent两种方法一起使用时,读取器可以将输出分成组。

  Debug.Unindent();

  Debug.WriteLine("DebugInformation-ProductEnding");

  14.为了确保每个Listener对象收到它的所有输出,请为Debug类缓冲区调用Flush方法:

  Debug.Flush();

  使用Trace类您还可以使用Trace类生成监视应用程序执行的消息。Trace和Debug类共享大多数相同的方法来生成输出,这些方法包括:

  • WriteLine
  • WriteLineIf
  • Indent
  • Unindent
  • Assert
  • Flush

  您可以在同一应用程序中分别或同时使用Trace和Debug类。在一个“调试解决方案配置”项目中,Trace和Debug两种输出均为活动状态。该项目从这两个类为Listener对象生成输出。但是,“发布解决方案配置”项目仅从Trace类生成输出。该“发布解决方案配置”项目忽略任何Debug类方法调用。

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号