当前位置:文档之家› .NET应用程序的调试与配置

.NET应用程序的调试与配置


用于指示开关是否允许警告消息 构造函数,初始化 TraceSwitch 类的新实例,其第一个参数 为该实例的 DisplayName
下面给出使用TraceSwitch类控制跟踪信息输出的一个示例: 【例13-2】在Visual 下新建一个控制台应用程序项目,然后输入以下源代码: using System; using System.Diagnostics; public class TraceTest { static TraceSwitch ts = new TraceSwitch("TraceLevelSwitch", ""); static void Main(){ TextWriterTraceListener ttl = new TextWriterTraceListener("E:\\Trace.txt"); //创建一个基于文本文件的侦听器并添加到Trace.Listeners Trace.Listeners.Add(ttl); Trace.WriteLineIf(ts.TraceInfo, "Trace is on"); if(ts.TraceInfo) Trace.TraceInformation("This is a Information."); if (ts.TraceWarning) Trace.TraceWarning("This is a Warning!"); if(ts.TraceError) Trace.TraceError("This is a Error!"); Trace.WriteLineIf(ts.TraceInfo, "Trace is off"); Trace.Close(); //关闭跟踪 ttl.Close(); //关闭侦听器 Console.ReadLine(); } } 为了使程序正常运行,还需要在系统的配置文件中输入以下内容: <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.diagnostics> <switches> <add name="TraceLevelSwitch" value="1" /> </switches> </system.diagnostics> </configuration> 然后,就可以编译运行本例中程序。该程序运行时产生的跟踪消息被输出到一个磁盘文件E:\\Trace.txt, 打开该文件就能看到程序中产生的跟踪消息。如果修改配置文件中的 XML元素<add
编译或增量编译,也就是说只有代码修改过的模块需要重新编译,这样就有利于提高编译的速度。小型应 用系统可能总共只包含一个模块,那样的话,obj和bin中内容可能会差不多。
13.1.2 使用 Trace 类输出跟踪消息
代码跟踪是调试中常用的手段。Visual IDE下可以对应用程序执行逐行(快捷键为F11)或 逐个方法(快捷键为F10)的跟踪,也可以在代码中任意行位置插入跟踪点。代码一旦执行到跟踪点的位置, 程序会暂停,并且通过代码窗口和其它途径将程序内部的当前状态(如变量的值等)充分呈现给调试人员。 因此,跟踪是程序查错的有效手段。从软件工程的观点看,跟踪主要为“白盒”测试提供一种手段。 在IDE下对.NET程序进行跟踪时,一般应使用debug版本,因为正常情况下,debug版本的程序中保存了 跟踪所必需的完整信息。这些信息保存在项目文件夹的 bin\debug子目录下的.pdb(Program Debug Database)文件之内。release版本是否可以被跟踪,取决于其编译时的选项。例如使用/debug:pdbonly则 可以被跟踪,使用/debug-则不能跟踪。也可以看一下bin\release子目录内是否有.pdb文件来确定该 release版本能否用于跟踪。 .NET框架下有一个System.Diagnostics 命名空间, 是专门为应用程序的调试提供服务的。 Debug和Trace 是该命名空间下的类。恰当地使用这两个类的方法,可以给使用不同编译器选项生成的应用程序添加跟踪、 调试和检测功能。并且可以在IDE以外对程序执行这些跟踪或检测,还可以把跟踪点的相关信息或检测结果 写入到日志、文本文件或其他设备中,以便在此后进行分析。表13-1给出Trace类中常用的属性和方法: 表 13-1 Trace 类中常用的属性和方法 名 称 方法 表示当前输出中使用的缩进级别 每一级中缩进空格的个数 用于接收跟踪输出的一组侦听器的集合 设置断言。 即在此位置检查某 bool 表达式, 若表达式为 false, 则显示一条消息 Close Fail 法 Flush Indent TraceError TraceInformation TraceWarning Write WriteIf WriteLine 刷新输出缓冲区,然后关闭 Listeners 中的侦听器 发出一条错误消息 刷新输出缓冲区,并将缓冲区中的数据写入 Listeners 将当前的 IndentLevel 增加 1 将一条错误消息写入 Listeners 中 将一条跟踪消息写入 Listeners 中 将一条警告消息写入 Listeners 中 将一条消息写入 Listeners 中 当条件满足时,将一条消息写入 Listeners 中 将一条消息写入 Listeners 中并换行 描 述
DisplayName 属 TraceError 性 TraceInfo TraceVerbose
用于标识该开关的名称,应与配置文件中使用的名称一致 该属性表示开关所允许的消息的级别 用于指示开关是否允许错误处理消息 用于指示开关是否允许信息性消息 用于指示开关是否允许所有消息
TraceWarning 方 TraceSwitch 法
图 13-2 使用 Trace 类进行跟踪时出现“断言失败”对话框
13.1.3 使用 TraceSwitch 类控制信息输出
在调试阶段对程序进行跟踪时, 需要经常调整输出到侦听器的消息的数量和类型。 特别是对于通过Trace 类的 TraceInformation 、TraceWarning 或 WriteLine方法输出的消息,一般来说都不是对程序有重大影响的 致命消息, 往往是可以忽略的。 尤其是在使用release版本时, 会更多地忽略次要因素对系统的干扰。 因此, .NET 中定义了TraceSwitch类用于控制程序中输出的跟踪信息。TraceSwitch可以在应用系统的配置文件中定义 和修改,因此,不必修改或重新编译源代码,就能改变对跟踪信息输出级别的限制。 表13-2 给出TraceSwitch类中常用的属性和方法: 表 13-2 TraceSwitch 类中的常用属性和方法 名 Level 称 描 述
AutoFlush 属 IndentLevel 性 IndentSizБайду номын сангаас Listeners Assert 方
该属性指示是否在每次执行写入后都要调用侦听器的 Flush
WriteLineIf
当条件满足时,将一条消息写入 Listeners 中并换行
Trace的方法大部分是静态方法,一般都是用于向侦听器输出的。所谓侦听器就是一个专用的文本输出 通道(TextWrite的派生类对象),可以是控制台窗口、文本文件等。侦听器可以有多个。对TraceError、 TraceInformation、TraceWarning这三个方法的输出,可以通过TraceSwitch类型的对象进行筛选,屏蔽掉 其中未达到指定级别的消息。TraceSwitch类将在稍后予以介绍。 下面的示例是一个使用Trace类方法生成调试信息的控制台应用程序: 【例13-1】在Visual 下新建一个控制台应用程序项目,然后输入以下源代码: using System; using System.Diagnostics; public class TraceTest { static void Main() { Trace.Listeners.Add(new ConsoleTraceListener()); //创建一个向控制台输出的侦听器并加入到Trace.Listeners Trace.WriteLine("Trace is on"); Trace.TraceInformation("This is a Information."); Trace.TraceWarning("This is a Warning!"); Trace.TraceError("This is a Error!"); int k = -1; Trace.Assert(k >= 0, "k is >= 0"); //插入一个断言 TestClass t = new TestClass(); t.DoSomething(); Trace.WriteLine("Press ENTER to exit..."); Trace.Close(); Console.ReadLine(); } } class TestClass { public void DoSomething(){ int n = 49; Trace.WriteLineIf(n<50, n+" is less than 50. (report from TestClass)"); //条件满足时输出信息,注意跟踪语句可进入任意子模块中的任何位置 }
第十三章 应用程序系统的调试与配置
本章主要介绍与.NET托管程序的调试和配置有关的一些问题,还附带讨论了一些有关应用系统发布的 问题。这些内容主要针对控制台应用程序和Windows应用程序的项目的开发,对于和另外一些特殊 类型的托管程序则不尽相同。
相关主题