在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. Prime Path

    poj3126:http://poj.org/problem?id=3126 题意:给你两个数n,k,两个数都是四位数的素数.现在让你改变n的一位数,让n变成另外一个素数.然后把这个素数在改变其中的以 ...

  2. Linux 配置多IP

    这里以红帽Linux为例.假定原系统已配置一个IP,地址为:192.168.20.140,配置文件路径/etc/sysconfig/network-script/ifcfg-eth0.现在需要配置一个 ...

  3. mysql 安装1

    Linux 安装mysql.tar.gz包(2012-09-28 19:25:06) 标签: it 分类: linux学习编 我用的mysql的版本的是:mysql--linux-i686-icc-g ...

  4. 「Poetize4」玉蟾宫

    描述 Description 这片土地被分成N*M个格子,每个格子里写着'R'或者'F',R代表这块土地被赐予了rainbow,F代表这块土地被赐予了freda.现在freda要在这里卖萌...它要找 ...

  5. (转载)mysql中百万级数据插入速度测试

    (转载)http://www.111cn.net/database/mysql/42453.htm 100W的数据对于很多朋友来说算小菜了,但今天我就想到创建一个大量数据的测试环境,于是找了一下怎么插 ...

  6. datagridview bindingsource刷新数据

    调用bindindsource的ResetBindings() 方法

  7. bzoj 1602 [Usaco2008 Oct]牧场行走(LCA模板)

    1602: [Usaco2008 Oct]牧场行走 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 379  Solved: 216[Submit][Sta ...

  8. python多线程机制

    Python中的线程从一开始就是操作系统的原生线程.而Python虚拟机也同样使用一个全局解释器锁(Global Interpreter Lock,GIL)来互斥线程多Python虚拟机的使用. GI ...

  9. Linux用户与用户组的详解

    1,用户和用户组文件   在linux中,用户帐号,用户密码,用户组信息和用户组密码均是存放在不同的配置文件中的.   在linux系统中,所创建的用户帐号和其相关信息(密码除外)均是存放在/etc/ ...

  10. Hadoop 的子项目

    Hadoop Common: 在0.20及以前的版本中,包含HDFS.MapReduce和其他项目公共内容,从0.21开始HDFS和MapReduce被分离为独立的子项目,其余内容为Hadoop Co ...