• [转]【笔记】使用.net中的Debug与Trace加强调试能力(SamWang)


    转载自:

    ---------------------
    作者:SamWang
    来源:CNBLOGS
    原文:https://www.cnblogs.com/wangshenhe/archive/2012/05/30/2526087.html

      最近在读《.NET开发人员调试策略》,书倒是不错,只是翻译的比较差。不过里面介绍的一些调试的心得还不错,有些收获。

      下面我就总结下本书中关于Debug和Trace的一些应用,算作一种读书笔记。

      粗略概括下关于修改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.直接创建

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

    日志内容:

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

       2.通过配置文件创建

    App.config
     1 <?xml version="1.0" encoding="utf-8" ?> 2 <configuration> 3     <system.diagnostics> 4         <trace autoflush="true" indentsize="2"> 5             <listeners> 6                 <add name ="myListener" 7                      type ="System.Diagnostics.TextWriterTraceListener" 8                      initializeData ="C:\MyListener.log"/> 9             </listeners>10         </trace>11         <switches>12             <!--TraceLevel.Off = 0; 从不做任何记录!13                 Error = 1; 只记录错误14                 Warning = 2;记录错误和警告15                 Info = 3; 记录错误、警告和信息16                 Verbose = 4; 记录所有内容-->17             <add name ="MySwitch" value="3"/>18             <add name ="YourSwitch" value="4"/>19         </switches>20     </system.diagnostics>21 </configuration>
     1         static void Main(string[] args) 2         { 3             TraceSwitch ts = new TraceSwitch("MySwitch", "descrption");//开关 4             Trace.WriteLine(DateTime.Now.ToString() + "--Enter function LogTest"); 5             Trace.Indent(); //缩进+1 6             Trace.WriteLine("This is indented once"); 7             Trace.Indent(); 8             Trace.WriteLineIf(ts.TraceInfo, "MySwitch TraceInfo is true!"); 9             Trace.Unindent(); //缩进-110             Trace.Unindent();11             Trace.WriteLine("Leave function LogTest");12         }

    日志内容:

    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即可写入事件日志。

       


    ---------------------
    作者:SamWang
    来源:CNBLOGS
    原文:https://www.cnblogs.com/wangshenhe/archive/2012/05/30/2526087.html
    版权声明:本文为作者原创文章,转载请附上博文链接!

  • 相关阅读:
    多数据源源路由方案
    java 异常信息返回
    SQL中只要用到聚合函数就一定要用到group by 吗?
    ASP.NET使用一般处理程序实现上传文本文件后实时读取
    git-删除远程不存在的分支
    Spring Boot-整合Retry框架重试机制
    vue3 Unsupported URL Type “npm:“: npm:vue-loader@^16.0.0-beta.7
    npm : 无法加载文件 D: odejs pm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 http://go.microsoft.com/fwlink
    flutter dio请求DioError [DioErrorType.DEFAULT]: SocketException: Insecure socket connections are disallowed by platform: ****
    Vue Element UI el-table 样式属性重叠发生错位
  • 原文地址:https://www.cnblogs.com/dinghw/p/12447072.html
Copyright © 2020-2023  润新知