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,然后显示到控件上。

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

        

      

  • 相关阅读:
    牛客网-练习题
    牛客网-趋势科技-2020届校园招聘上机考试-1
    976. Largest Perimeter Triangle--Easy
    812. Largest Triangle Area--Easy
    123. Best Time to Buy and Sell Stock III--Hard
    1131. Maximum of Absolute Value Expression--Medium
    1103. Distribute Candies to People--Easy
    满足高并发的I/O Reactor线程模型 (附图,附代码)
    最简洁易懂的方式介绍I/O模型
    从鸿蒙OS的特性看华为应对封锁的策略
  • 原文地址:https://www.cnblogs.com/monkeyZhong/p/4550529.html
Copyright © 2011-2022 走看看