使用.net中的Debug与Trace加强调试能力(SamWang)

来源:互联网 发布:淘宝刷好评兼职交会费 编辑:程序博客网 时间:2024/05/29 13:39

粗略概括下关于修改BUG的几种方法:

 

  • 通过调试器调试

    顾名思义就是跟踪源代码进行调试,微软还提供了远程调试的功能。通过源代码的方式调试,我们一般会采用以下的几种方法:

  1. 使用Exception
  2. 使用MessageBox。
  3. 使用#if Debug .. #endif
  4. 使用断言调试:其中有Debug.Assert和Trace.Assert两种,Debug只在Debug模式下有效,Trace则都有效。断言模式还有个优点,可以直接点击按钮重试,选择调试器进行调试。
  5. 当然还有通过堆栈跟踪或者其他的一些特殊手段等等。

   .net所提供的断言调试相当强大,建议大家采用该方法。具体应用请自行寻找资料。 

   msdn:

      Debug.Assert 方法

      Trace.Assert 方法

 

   

  • 通过日志调试

   想必大家肯定遇到过,有些BUG在客户那边会出现,但是本机就是模拟不出来。而客户要嘛远隔万里,要嘛就是不允许安装远程调试。

   在这种情况下,就可以通过日志调试,也就是将一些重要的信息写到文本中,当出现问题或者BUG可以通过查看日志文件来查找原因。

   记录日志文件,就是写文件的操作,可以有很多种方法。

   此处介绍下通过.net提供的侦听器与开关记录日志。   

   1.直接创建

 

static void Main(string[] args)         {             bool someBool = true;             Trace.Listeners.Add(new TextWriterTraceListener(@"C:\MyListener.log"));              Trace.AutoFlush = true;//每次写入日志后是否都将其保存到磁盘中              Trace.WriteLine(DateTime.Now.ToString() + "--Enter function LogTest");             Trace.Indent(); //缩进+1             Trace.WriteLine("This is indented once");             Trace.Indent();             Trace.WriteLineIf(someBool, "Only written if someBool is true");             Trace.Unindent(); //缩进-1             Trace.Unindent();             Trace.WriteLine("Leave function LogTest");         }


 

日志内容:

2012-05-30 14:11:41--Enter function LogTest    This is indented once        Only written if someBool is trueLeave function LogTest

 

2.通过配置文件创建

App.config  <?xml version="1.0" encoding="utf-8" ?> <configuration>     <system.diagnostics>         <trace autoflush="true" indentsize="2">             <listeners>                 <add name ="myListener"                      type ="System.Diagnostics.TextWriterTraceListener"                      initializeData ="C:\\MyListener.log"/>             </listeners>         </trace>         <switches>             <!--TraceLevel.Off = 0; 从不做任何记录!                 Error = 1; 只记录错误                 Warning = 2;记录错误和警告                 Info = 3; 记录错误、警告和信息                 Verbose = 4; 记录所有内容-->             <add name ="MySwitch" value="3"/>             <add name ="YourSwitch" value="4"/>         </switches>     </system.diagnostics> </configuration>


 

static void Main(string[] args)         {             TraceSwitch ts = new TraceSwitch("MySwitch", "descrption");//开关             Trace.WriteLine(DateTime.Now.ToString() + "--Enter function LogTest");             Trace.Indent(); //缩进+1             Trace.WriteLine("This is indented once");             Trace.Indent();             Trace.WriteLineIf(ts.TraceInfo, "MySwitch TraceInfo is true!");             Trace.Unindent(); //缩进-1             Trace.Unindent();             Trace.WriteLine("Leave function LogTest");         }


 

日志内容:

2012-05-30 14:19:43--Enter function LogTest  This is indented once    MySwitch TraceInfo is true!Leave function LogTest

 

   3.windows事件日志

   通过Trace或者Debug中的EventLogTraceListener即可写入事件日志。