C#如何使用 Debug 和 Trace 类

本文介绍如何在C#中使用Debug和Trace类来监控程序执行情况,包括消息输出、条件判断及输出目标配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://wenku.baidu.com/view/8a5def15f18583d04964596b.html

C#如何使用 Debug 和 Trace 

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

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

• Microsoft Windows 2000 或 Microsoft Windows XP

• Microsoft Visual C# .NET

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

 方法说明

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

 当程序运行时,您可以使用 Debug 类的方法来生成消息,以帮助您监视程序执行顺序、检测故障或提供性能度量信息。默认情况下,Debug 类产生的消息显示在 Visual Studio 集成开发环境 (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 集合才可接收调试输出。

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

 

using System.Diagnostics

 

 

namespace DebugAndTrace

{

    class Program

    {

        static void Main(string[] args)

        {

            string sProdName = "Widget";

            int iUnitQty = 100;

            double dUnitCost = 1.03;

 

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

            Debug.WriteLine("Debug Information-Product Starting ");

 

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

            Debug.Indent();

 

            /*要显示所选变量的内容,请使用 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());

 

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

            System.Xml.XmlDocument oxml = new System.Xml.XmlDocument();

            Debug.WriteLine(oxml);

 

            /*要整理输出,可以包括一个类别作为 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");

 

            /* 仅在使用 Debug 类的 WriteLineIf 方法将指定条件计算为 true 时,“输出”窗口才可以显示消息。

             * 将要计算的条件是 WriteLineIf 方法的第一个输入参数。WriteLineIf 的第二个参数是仅在第一个参数的条件计算为真时才显示的消息。*/

            Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear");

            Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear");

 

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

            Debug.Assert(dUnitCost > 1, "Message will NOT appear");

            Debug.Assert(dUnitCost < 1, "Message will appear since dUnitcost < 1 is false");

 

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

            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);

 

            /*为了清晰易读,请使用 Unindent 方法去除 Debug 类为后续消息生成的缩进。当您将 Indent  Unindent 两种方法一起使用时,读取器可以将输出分成组。*/

            Debug.Unindent();

            Debug.WriteLine("Debug Information-Product Ending");

 

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

            Debug.Flush();

 

 

            /*使用 Trace  您还可以使用 Trace 类生成监视应用程序执行的消息。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(); 

        }

    }

}

 

 

输出窗口为:

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

“DebugAndTrace.vshost.exe”(托管): 已加载“C:\WINDOWS\assembly\GAC_MSIL\System.resources\2.0.0.0_zh-CHS_b77a5c561934e089\System.resources.dll”

    ---- 调试断言失败----

---- 断言短消息----

Message will appear since dUnitcost < 1 is false

---- 断言长消息----

 

 

    at Program.Main(String[] args)  D:\Projects\DebugAndTrace\DebugAndTrace\Program.cs(50)

    at AppDomain._nExecuteAssembly(Assembly assembly, String[] args)  

    at AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)  

    at HostProc.RunUsersAssembly()  

    at ThreadHelper.ThreadStart_Context(Object state)  

    at ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)  

    at ThreadHelper.ThreadStart()  

 

    The product name is Widget

    The available units on hand are100

    The per unit cost is 1.03

Debug Information-Product Ending

 

 

其截图是:

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值