Dot Net的调试 - 3

原创 2004年05月29日 15:57:00

 

调试

 

  实际上调试和跟踪用得很普遍。Debug类中的方法有相同的名字的方法,这些方法实现了调试的功能。不同之处是在发布版本配置中是禁止使用的(这意味着不能产生二进制代码调用这些代码)。调试输出也可以在配置文件设置,请看下面:

<confuration>

       <system.diagnostics>

              <debug autoflush = “true” indentsize = “7” / >

       </system.diagnostics>

</confuration>

备注:调试的声明和语法和跟踪很类似。不同之处,就是把有Trace的地方替换为Debug

 

设置调试开关

最后讨论的主题是SwitchSwitch是有一些状态的对象。可以在配置文件或者编程的时候改变状态。Switch让你创建可配置的调试跟踪代码。最好了解Switch的方法是写一个段简单代码,如下:

using System;

using System.Diagnostics;

 

namespace Switching

{

       class SampleClass

{

       //Create a Switch. It is initialized by an externally specified value

       static TraceSwitch generalSwitch = new TraceSwitch(“CoolSwitch”, “Global Scope”);

       static public void SampleMethod()

       {

              //The first message is written if the switch state is set to TraceError

if(generalSwitch.TraceError)

                     console.WriteLine(“TraceError message”);

              //The second message is written if the switch state is set to TraceVerbose

              if (generalSwitch.TraceVerbose)

                     Console.WriteLine(“TraceVerbose message”);

              //The third message is writeen if the switch state is set to TraceWarning

              if (generalSwitch.TraceWarning)

                     Console.WriteLine(“TreaceWarning message”);

              //The fourth message is written if the switch state is set to TraceInfo

              if(generalSwitch.TraceInfo)

                      Console.WriteLine(“TraceInfo Message”);

       }

       public static void Main(string[] args)

       {

              //calls the sampleMethod method

              SampleMethod();

       }

       }

}

 

有几个switch类:TraceSwitchBooleanSwitch。这个例子中我们用使用TraceSwitch依照他们的状态创建输出信息。Switch状态由TraceErrror,TraceInfo,TraceVerboseTraceWarning属性检查。这些属性检查switch状态和如果trace级别等于或大于相应的常量,那么将返回true。例如,当这个级别是2或者更大那么TraceWarningtrue,下面表格是返回值:

TraceErroe

1

TraceWarning

2

TraceInfo

3

TraceVerbose

4

但是,正如我们已经说的,switch的状态可以在代码中修改,做个修改代码的范例:

using System;

using System.Diagnostics;

 

namespace Switching

{

       class SampleClass

{

       //Create a Switch. It is initialized by an externally specified value

       static TraceSwitch generalSwitch = new TraceSwitch(“CoolSwitch”, “Global Scope”);

       static public void SampleMethod()

       {

              //The first message is written if the switch state is set to TraceError

if(generalSwitch.TraceError)

                     console.WriteLine(“TraceError message”);

              //The second message is written if the switch state is set to TraceVerbose

              if (generalSwitch.TraceVerbose)

                     Console.WriteLine(“TraceVerbose message”);

              //The third message is writeen if the switch state is set to TraceWarning

              if (generalSwitch.TraceWarning)

                     Console.WriteLine(“TreaceWarning message”);

              //The fourth message is written if the switch state is set to TraceInfo

              if(generalSwitch.TraceInfo)

                      Console.WriteLine(“TraceInfo Message”);

       }

public static void Main(string[] args)

{

       Console.WriteLine(“Before manual level set/n”);

       SampleMethod();

       GeneralSwitch.Level = TraceLevel.Warning;

       SampleMethod();

}

}

运行程序,包含以下信息:

 

Before manual level set

 

TraceError Message

TraceWarning message

TraceInfo message

 

After manual level set

 

TraceError Message

TraceWarning Message

 

这些展示了改变trace switch层次。

 

计算性能

这部分我们将告诉你调试的花费时间。事实上,调试对于商业逻辑不起作用。但是调试代码需要花费时间。我们将计算应用程序中输出信息的花费时间。当你测试一个是建要求严格的应用程序时间,测量就很重要。看下面的代码:

using system;

using system.Diagnostics;

 

namespace DebugDemo

{

       class PrimeNumberDetector

       {

              public static bool IsPrime(int n)

              {

                     int upperbound = (int)Math.Sqrt(n);

                     for (int I = 2; I <= upperbound; I++)

                     {

                            Debug.WriteLine(“Processing number” + n + “, Testing with “ + i);

                            If((n%i) == 0)

                            {

                                   Debug.WriteLine(“FAILED”);

                                   Return false;

                            }

                     }

              }

             

              public Application

              {

                     [STAThread]

                     static void Main(string[] args)

                     {

                            for(int i = 2; i < 10000;i++)

                             if (PrimeNumberDetector.IsPrime(i))

                                   Console.WriteLine(“{0} is prime number” , i);

                     }

              }

       }

程序测试21000个整数和输出素数。调试的目的是测试每一个输出数字,不管是否是素数。如果数字不是素数,那么输出failed.

对比测量下带调试和不带调试的时间:

 

1

2

3

带调试功能(hh:mm:ss.ff)

000007.9714624

000007.9414192

000007.9714624

不带调试功能

(hh:mm:ss.ff)

000005.1273728

000005.5179344

000005.1273728

可以看出调试是昂贵的例子中花费了64%的执行时间

 

结论:

  文章中描述了调试跟踪.net程序的一般方法。当然还有一些其他问题,如,条件编译我们没有做。想学到更多的东西,可以看msdn。我们希望这篇文章帮助你掌握调试跟踪.net程序的技术。

 

.NET应用程序调试—原理、工具、方法

阅读目录: 1.背景介绍2.基本原理(Windows调试工具箱、.NET调试扩展SOS.DLL、SOSEX.DLL) 2.1.Windows调试工具箱2.2..NET调试扩展包,SOS.D...
  • wangqingpei557
  • wangqingpei557
  • 2014年10月15日 22:04
  • 4515

.NET高级调试(奋斗的小鸟)_PDF 电子书

下载地址:http://pan.baidu.com/share/link?shareid=1028907117&uk=721744522 内容简介     《.NET高级调试》内容主要包括:调试工具...
  • tjoy2005
  • tjoy2005
  • 2013年10月10日 18:23
  • 1225

几款.Net加密/加壳工具的比较

前言    使用过.NET的程序员都知道,.NET是一个巨大的跨时代进步,它开发效率高、功能强、界面观、耐用、新的语言C#已经提交为行业规范、CLR共公运行库资源丰富,这所有的特点标志着它成为主...
  • dayu9216
  • dayu9216
  • 2017年11月06日 10:11
  • 405

Net Core下多种ORM框架特性及性能对比

在.NET Framework下有许多ORM框架,最著名的无外乎是Entity Framework,它拥有悠久的历史以及便捷的语法,在占有率上一路领先。但随着Dapper的出现,它的地位受到了威胁,本...
  • sD7O95O
  • sD7O95O
  • 2017年12月03日 00:00
  • 225

在Centos7下发布.NET CORE项目

在centos服务器上安装部署DOTNET CORE编写的.NET程序
  • Chris_111X
  • Chris_111X
  • 2016年08月17日 17:39
  • 4258

ASP.NET CORE使用控制台程序调试web应用

在控制台程序中,我们可以使用 Console.WriteLine("debug") 便可以很方便查看日志输出。但是在web应用中要做到实时查看日志输出就很麻烦,大致的做法有: 把日志信息输出到客户端 ...
  • Chen_Victor
  • Chen_Victor
  • 2016年11月06日 19:30
  • 3780

Dot脚本语言语法整理

Dot语法整理
  • jy692405180
  • jy692405180
  • 2016年07月31日 12:25
  • 3366

Dot 与 GraphViz 经验总结

reference d3.js gallery: 仅仅是作个比较,d3的图确实好看一点 dot graphviz gallery: 其实也还不错 graphviz documence: 不同于官方文档...
  • u010598445
  • u010598445
  • 2016年08月16日 22:30
  • 3883

采用Reflector的VS.net插件断点调试无源码DLL

.Net的编程利器Reflector可以反编译基于.net开发的应用程序和DLL,其功能强大不用多说。今天想试验一把利用VS.net的插件断点调试外部无源码的DLL(只要是程序集都可以,所以exe也行...
  • lovetaosha
  • lovetaosha
  • 2015年05月16日 07:21
  • 4092

绘图神器 —— Graphviz dot 语言介绍

(1)文字的属性:fontcolor,fontsize, (2)可选的形状有:box, polygon, ellipse, oval, circle, point, egg, triangle, pl...
  • lanchunhui
  • lanchunhui
  • 2016年05月24日 11:17
  • 1501
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Dot Net的调试 - 3
举报原因:
原因补充:

(最多只允许输入30个字)