分享
 
 
 

Dot Net的调试 - 3

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

调试

实际上调试和跟踪用得很普遍。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程序的技术。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有