首页 > 编程 > .NET > 正文

Dot Net的调试 - 3

2024-07-21 02:23:40
字体:
来源:转载
供稿:网友
调试



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

<confuration>

<system.diagnostics>

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

</system.diagnostics>

</confuration>

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



设置调试开关

最后讨论的主题是switch。switch是有一些状态的对象。可以在配置文件或者编程的时候改变状态。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类:traceswitch和booleanswitch。这个例子中我们用使用traceswitch依照他们的状态创建输出信息。switch状态由traceerrror,traceinfo,traceverbose和tracewarning属性检查。这些属性检查switch状态和如果trace级别等于或大于相应的常量,那么将返回true。例如,当这个级别是2或者更大那么tracewarning是true,下面表格是返回值:

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);

}

}

}

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

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


1
2
3

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

不带调试功能

(hh:mm:ss.ff)
00:00:05.1273728
00:00:05.5179344
00:00:05.1273728


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



结论:

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


  • 本文来源于网页设计爱好者web开发社区http://www.html.org.cn收集整理,欢迎访问。
  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表