zoukankan      html  css  js  c++  java
  • C# trace debug TraceListener调试信息详解

      在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方法,可能有缓存的数据就没有输出到文本。

      我平时用得多的就是单独用TextWriterTraceListener,把调试信息写到文本

           如果想把信息写到某个控件上显示,可以自定义一个Listener,然后显示到控件上。

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

        

      

  • 相关阅读:
    【NOIP 模拟赛】钟 模拟+链表
    【NOIP 模拟赛】Evensgn 剪树枝 树形dp
    【NOIP模拟赛】公主的朋友 区间染色问题
    【BZOJ 3669】 [Noi2014]魔法森林 LCT维护动态最小生成树
    【BZOJ3674】可持久化并查集加强版
    【NOIP模拟赛】 permutation 数学(打表)
    【NOIP模拟赛】beautiful 乱搞(平衡树)+ST
    【NOIP模拟赛】与非 乱搞
    【NOIP模拟赛】Evensgn 的债务 乱搞
    [NOIP2009]靶形数独 深搜+枝杈优化
  • 原文地址:https://www.cnblogs.com/monkeyZhong/p/4550529.html
Copyright © 2011-2022 走看看