zoukankan      html  css  js  c++  java
  • 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) 和名为 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("d:/Output.txt"));
    //System.Diagnostics.TextWriterTraceListener tr2 = new System.Diagnostics.TextWriterTraceListener(@"d:/Output.txt");
    //System.Diagnostics.TextWriterTraceListener tr2 = new System.Diagnostics.TextWriterTraceListener(@"Output.txt");
    Debug.Listeners.Add(tr2);

     说明:

    tr1定义:将调试信息,即Debug输出通过控制台程序输出。
    tr2定义,将调试信息,即Debug内容输出到Output.txt文件,通常需要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
    ◆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"));
  • 相关阅读:
    [转]django自定义表单提交
    [django/mysql] 使用distinct在mysql中查询多条不重复记录值的解决办法
    [Django]下拉表单与模型查询
    [Django]模型提高部分--聚合(group by)和条件表达式+数据库函数
    [Django]模型学习记录篇--基础
    [Django]数据批量导入
    怎么让自己的本地php网站让别人访问到
    HTML Marquee跑马灯
    marquee标签详解
    apache的虚拟域名rewrite配置以及.htaccess的使用。
  • 原文地址:https://www.cnblogs.com/gsk99/p/4938622.html
Copyright © 2011-2022 走看看