在C#编程中,可能要碰到把调试信息输出的问题,我们可以自己把信息显示在某个控件上,但是MS自己提供了一套机制帮助我们输出一些调试信息,这些信息有助于我们判断程序的走向,不用自己再去额外写调试代码了。

一般调试的时候有两个很重要的类Trace, Debug,

Trace帮助我们跟踪代码用,Debug帮助我们调试代码用。是否启用,取决于我们的设置:

比如这个只定义了Trace常量,表示只启用了Trace类。

先说说Trace类的结构(Debug类一样):

Trace:

  Listeners:这是个TraceListener的集合,这个是最关键的。

  AutoFlush:自动刷新。其实设置的是TraceInternal,这个是个静态类,也比较关键,后面介绍。

  Flush:刷新,调用的也是TraceInternal.Flush方法。

  WriteLine,Write:写信息的方法,调用的是TraceInternal.Write(),WriteLine()。

  

接下来再介绍TraceInternal这个静态类:

  Listeners:这个跟Trace里面的Listeners是一样的。

AutoFlush:自动刷新

  Flush():刷新的方法,这里调用每个Listener对象的Flush。

  Write():写方法,调用的是每个Listener对象的Write方法,如果Auto为真,就调用Flush()方法。

再介绍TraceListener,这个类:

Flush():刷新方法。

  Write():写方法。

这个类有几个派生类:

  1)TextWriterTraceListener.

    Write():写方法。调用的是TextWriter的Writer方法写文本。

    Flush(): 刷新方法。调用的是TextWriter的Flush方法刷新。

    TextWriter, 内部对象,写文本对象。

  2)EventLogTraceListener. 事件日志监听。

    EventLog:事件日志对象。

    Write():写方法。调用的是EventLog的WriterEntry方法写信息。

3)DefaultTraceListener,缺省的监听。

  4)自定义的TraceListener.

  到这里我们可以先理一理思路,我们程序在运行的时候,假设设置了Trace常量,假设调用了Trace.WriteLine(), 相当于对Trace里面的监听集合中的每一个监听器进行输出,也就是说输出到每一个TraceListener里面。但是假设只调用某一个TraceListener的WriteLine(),那么就不会输出到其他TraceListener里面。另外还有一个属性要关注,那就是Flush(), 因为TraceListener没有AutoFlush属性,所以我们如果要保证信息输出到TraceListener指定的地方,就要调用Flush方法,比如TextWriterTraceListener这个类,如果只是WriteLine,如果不调用Flush方法,可能有缓存的数据就没有输出到文本。

我这里把这个思路理顺了下,具体的例子就不准备了。

    

  

C# trace debug TraceListener调试信息详解的更多相关文章

  1. IntelliJ IDEA 2020.1.1 x64 Debug 断点调试模式详解

    前言 对于初入职场的萌新们来说,很多都还不会 Debug 断点模式.记得我刚写代码的时候,也是通过 System.out.println() 一行一行的把变量打印出来看.其实强大的编辑器已经帮我们做好 ...

  2. redis.conf配置信息详解

    redis.conf配置信息详解 配置文件 # Redis 配置文件 # 当配置中需要配置内存大小时,可以使用 1k, 5GB, 4M 等类似的格式,其转换方式如下(不区分大小写) # # 1k =& ...

  3. Linux的ifconfig看到的信息详解

    Linux的ifconfig看到的信息详解 [root@localhost ~]# ifconfig eth0 Link encap:Ethernet HWaddr :::BF:: inet addr ...

  4. C# Debug和Trace:输出调试信息

    在 C# 语言中允许在程序运行时输出程序的调试信息,类似于使用 Console.WriteLine 的方式向控制台输出信息.所谓调试信息是程序员在程序运行时需要获取的程序运行的过程,以便程序员更好地解 ...

  5. adb调试命令详解-2016.02.01

    adb(Android Debug Bridge),调试桥可以让设备的调试监测过程在远端进行,而不必在运行实际运行应用的设备上,方便调试的输出. 1 命令详解 a 查看帮助信息         adb ...

  6. Windbg调试命令详解

    作者:张佩][原文:http://www.yiiyee.cn/Blog] 1. 概述 用户成功安装微软Windows调试工具集后,能够在安装目录下发现四个调试器程序,分别是:cdb.exe.ntsd. ...

  7. Windbg调试命令详解(1)

    转载注明>> [作者:张佩][镜像:http://www.yiiyee.cn/Blog] 1. 概述 用户成功安装微软Windows调试工具集后,能够在安装目录下发现四个调试器程序,分别是 ...

  8. IDEA中 Debug 调试工具(图文详解)

    DEBUG调试工具 一. Debug 调试工具 1. Debug的作用 2. Debug的使用步骤 3. IDEA中Debug按钮详解 总结 参考博文:https://blog.csdn.net/qq ...

  9. IE=edge,chrome=1的META信息详解

    这几天在玩 HTML5 ★ Boilerplate,注意到meta信息中有这么一句: 复制代码 代码如下: <meta http-equiv="X-UA-Compatible" ...

随机推荐

  1. PlatformTransactionManager

    Spring Boot 使用事务非常简单,首先使用注解 @EnableTransactionManagement 开启事务支持后,然后在访问数据库的Service方法上添加注解 @Transactio ...

  2. [转]关于Icon,Image,ImageIcon的简单的对比参考

    转自:http://blog.csdn.net/bcmissrain/article/details/7190886 其实就算是现在,我还是有不少地方概念模糊,但是下面的内容是是没有什么问题的.稍微介 ...

  3. (转载)mysql查询一天,查询一周,查询一个月的数据

    (转载)http://www.cnblogs.com/likwo/archive/2010/04/16/1713282.html 查询一天: select * from table where to_ ...

  4. QTP关于AOM的Javascript启动方式

    序 QTP的AOM模型想必大家都很熟悉了,平时常用的就是通过VBS脚本的方式编写启动程序(也是我现在用的方法).其实,还有很多其他的方式,如Java,C#,JS,这些语言都是通过调用QTObjectM ...

  5. windows下sqlite3静态库和动态库的编译

    1.下载sqlite3源码:http://www.sqlite.org/download.html 主要是sqlite-amalgamation-XXXXXXX.zip.sqlite-dll-win3 ...

  6. CodeForces 595B

    题目链接: http://codeforces.com/problemset/problem/595/B 题意: 有一个n位的电话号码,每位电话号码将分成n/k段,每段均为k个数,求出满足以下要求的电 ...

  7. 在Ubuntu中安装Redis

    原文地址:http://blog.fens.me/linux-redis-install/ 在Ubuntu中安装Redis R利剑NoSQL系列文章,主要介绍通过R语言连接使用nosql数据库.涉及的 ...

  8. FATE(完全背包)

    /* http://acm.hdu.edu.cn/showproblem.php?pid=2159 分析: 和普通的完全背包没有什么太大的区别 但是题目中给出了限制最多可杀s个怪 用二维数组dp[i] ...

  9. 用C#来开发CAD插件,含源代码

    转自原文 用C#来开发CAD插件,含源代码 CAD插件看起来很神秘,其实一个合格码农经过几天就能快速掌握.没什么秘密,开发CAD插件和winform一样简单学几个类库用法就是(只是太多人不喜欢知识分享 ...

  10. C#读写共享文件夹

    该试验分以下步骤: 1.在服务器设置一个共享文件夹,在这里我的服务器ip地址是10.80.88.180,共享文件夹名字是test,test里面有两个文件:good.txt和bad.txt,访问权限,用 ...