首页 > 编程 > .NET > 正文

Dot Net的调试 - 2

2024-07-21 02:24:43
字体:
来源:转载
供稿:网友
fail方法不能阻止应用程序运行,他们仅仅输出错误信息。write和writeline方法写入一个消息。他们不同之处仅仅在于后者输出执行后再输出一行。最后,flush方法刷新缓存。flush方法对跟踪信息输出的设备有作用(例如,流)。你可以使用自动刷新—每个信息后都自动刷新侦听者。可以在配置文件里面配置:

<configuration>

<stream.diagnostics>

<trace autoflush = “false” />

</stream.diagnostics>

</configuration>



正如你看到的,如果你创建自己的倾听者,需要至少实现write(string)和writeline(string)方法(这些方法是抽象方法)。

微软提供三种跟踪侦听者:defaulttracelistener,eventlogtracelistener和textwritetracelister.。第一个侦听者有缺省的方法(如果应用程序在命令行的环境下运行,那么输出信息到控制台。如果应用程序在调试情况下,输出到窗口)。第二个侦听者输出信息到指定事件日志中(基于nt技术—winnt,2k,xp或者.net)。第三个倾听者输出文本到流中。

活动倾听者列表可以在编程中设置或者在配置文件中。缺省包括defaulttracelistener.

编程改变活动倾听者列表,要管理倾听者集合(通过添加和删除方法)。配置文件中管理倾听者,你要用下边的语法:

<configuration>

<system.diagnostics>

<trace autoflust=”false” indentsize = 4>

<listeners>

<add name=”mylistener” type=”system.dianostics.textwritertracelistener, system”

initializedata = “c:/mylistener.log”/>

<remove type = “system.diagnostics.defaulttracelistener,system”/>

</listeners>

</trace>

</system.dianostics>

</configuration>

initializedat参数是传递到构造器的的字符串参数(指定eventlogtracelistener侦听者事件日志)。

侦听者很熟悉创建应用程序使用侦听者输出跟踪信息。代码很简单:

//trace listeners demo

//

//purpose:to demonstrate how to use listeners

using system;

using system.diagnostics;



namespace assertion

{

class application

{

[stathread]

static void main(string[] args)

{

trace.writeline(“calling writeline method”, “trace listeners demo”);

trace.flush();

}

}

}



这些代码还不够,我们必须创建一个配置文件来设置侦听者:

<configuration>

<system.diagnostics>

<trace autoflush="false" indentsize="4">

<listeners>

<remove type="system.diagnostics.defaulttracelistener"/>

<add name="mylistener" type="system.diagnostics.textwritertracelistener"

initializedata="mylistener.log" />

<add name="mylistenereventlog" type="system.diagnostics.eventlogtracelistener"

initializedata="application" />

</listeners>

</trace>

</system.diagnostics>

</configuration>

这个配置文件删除了缺省侦听者加入两个自定义侦听者:第一个输出信息到文本文件,第二个输出到事件日志中。对于第一个侦听者initializedata属性指定输出数据的文件,第二侦听者记录事件到事件日志。

运行程序。检查第一个侦听者,可以看到mylistener.log文件,它包含以下信息:tracing listeners demo:calling writeline method



第一个侦听者把信息写入文本文件中。察看第二个。打开微软控制台在事件视图中浏览应用程序事件日志(这个就是我们在配置文件中指定的)。在这里可以看到我们应用程序的事件信息。更多的可能,在这个列表最上边。如果你双击,可以看到其中的内容。我们发现如下信息:


是输出信息更加容易阅读:



有时候应用程序很复杂,为了容易理解可以格式化跟踪信息。使输出信息更加漂亮,可以使用缩排,看下面的简单代码:

public void callee()

{

trace.wrteline(“callee started”);

……//some internal logic

trace.writeline(“initializing buffer”);

……//some extra internal login

trace.writeline(“exiting callee”);

}



public void caller()

{

trace.write(“caller called”);

…..//some external logic

callee();

…..//some extral logic

trace.writeline(“initializing buffer”);

trace.write(“exiting caller”);

}

输出信息如下:

caller called

callee stared

initializing buffer

exiting callee

initializing buffer

exiting caller



如果方法执行前后没有显示信息,我们将被这些拷贝的初始化缓存信息所迷惑。除了信息显示不清楚。为了避免不明确,我们使用trace类支持的缩进功能。修改的代码,使用缩进:

public void callee()

{

trace.indent();

trace.writeline(“callee started”);

…..//some internal logic

trace.writeline(“initializing buffer”);

….//some extra internal logic

trace.writeline(“exiting callee”);

trace.unindent();

}



public void caller()

{

trace.write(“caller called”);

….//some external logic

callee();

….//some extra login

trace.writeline(“initiallizing buffer”);

trace.write(“exiting caller”);

}

输出信息如下:



caller called

callee started

initializing buffer

exiting callee

initializing buffer

exiting caller

正如你看到的,callee方法输出缩进,很容易分开不同方法的信息。可以调用indent和unident方法,达到分离信息的目的。

在配置文件中修改跟踪配置:

<configuration>

<system.diagnostics>

<trace indentsize = “3” / >

</system.diagnostics>

</configuration>

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表