以前使用ASP开发过Web应用程序的人员肯定知道调试Web应用程序是多么麻烦在ASP中调试是痛苦的通常包括了使用ResponseWrite()方法输出变量的值那么请问一下自己你有多少次忘记了在布署应用程序之前删除了调试语句?
随着NET框架组件的出现这种情况发生了彻底的改变在NET中你可以使用Visual Studio NET中的调试程序跟蹤整个Web应用程序的执行或者使用SystemWebTraceContext名字空间中的Trace类本文演示如何使用Trace类辅助你的调试工作
使用Trace类
ASPNET中包含了一个帮助跟蹤应用程序信息流的Trace类作为使用Response对象进行调试的代替你现在可以使用Trace类打印出调试信息了
为了演示它的使用我们首先建立一个ASPNET Web应用程序并在默认的WebForm上放置一个Button和一个ListBox控件(如图所示)用三个项填充ListBox控件并把它的AutoPostBack属性设置为True
对于本文我希望跟蹤应用程序的执行流首先激活跟蹤页面指令要求含有Trace属性它的值设置为True(切换到查看HTML源模式)如图所示
图激活跟蹤下一步我在Form的load事件中插入Trace语句这样我就知道是否发生了PostbackPostBack事件是ASPNET中的最容易混乱的一个特性它经常导致初用ASPNET的开发者的失败
Private Sub Page_Load(ByVal sender As SystemObject _
ByVal e As SystemEventArgs) _
Handles MyBaseLoad
此处放置初始化页面的用户代码
TraceWrite(Page loaded)
If Not IsPostBack Then
TraceWrite(Not in a postback)
postback发生的时候执行一些操作
Else
TraceWrite(In a postback)
执行一些操作
End If
End Sub
我同样想知道当ListBox数据项被选择的时候是否发生了postback
Private Sub ListBox_SelectedIndexChanged(ByVal sender As _
SystemObject _
ByVal e As SystemEventArgs) Handles _
ListBoxSelectedIndexChanged
TraceWrite(Listbox postback)
End Sub
当上面的ASPNET应用程序执行时将显示下面的输出结果(图所示)
图显示跟蹤信息你可以发现当第一次载入WebForm的时候你可以看到字符串Page loaded和Not in a postback如果你点击WebForm上的按钮你可以看到图所示的记录与此类似如果点击了ListBox也会显示Listbox postback字符串
图检查跟蹤信息跟蹤页面包含下面的部分(图中没有显示所有的信息)
注意我们的跟蹤信息显示在跟蹤信息段的下面如果要关闭跟蹤只需要简单地把页面指令中Trace的属性设置为False没有必要删除应用程序中的跟蹤指令现在关闭调试仅仅是设置一个布尔值这么简单了
打开/关闭跟蹤只是简单地修改页面指令中的Trace属性的值你也可以使用Trace类编程关闭跟蹤Trace类的成员如下
要编程关闭跟蹤可以在WebForm的load事件中使用下面的语句
TraceIsEnabled = false
在我们的例子中跟蹤信息没有很显目的显示因此它被其它的跟蹤信息掩埋了Trace类的Warn()方法可以把跟蹤信息打印为红色因此不是这样编写代码
TraceWrite(Page loaded)
而是
TraceWarn(Page loaded)
图显示了Warn()方法用红色显示的调试信息
图使用Warn()方法用红色显示跟蹤信息对跟蹤信息排序
把多个跟蹤语句放在一个应用程序中有时会显得杂乱如果你的跟蹤信息可以被分为不同的类别那么跟蹤就更容易了Trace类允许我们基于种类对跟蹤信息进行分类和排序
下面的例子演示了如何对跟蹤信息按类别进行分组
Private Sub Page_Load(ByVal sender As SystemObject _
ByVal e As SystemEventArgs) _
Handles MyBaseLoad
TraceTraceMode = TraceModeSortByCategory
此处放置初始化页面的用户代码
TraceWarn(Page_Load Page loaded)
If Not IsPostBack Then
执行一些操作
TraceWarn(Page_Load Not in a postback)
Else
TraceWarn(Page_Load In a postback)
End If
End Sub
Private Sub ListBox_SelectedIndexChanged(ByVal sender _
As SystemObject ByVal e As _
SystemEventArgs) Handles _
ListBoxSelectedIndexChanged
TraceWarn(ListBox Listbox postback)
End Sub
执行这个例子的时候将显示下面的调试信息它根据类别分组了(图所示)
图按类别排序让我们分析上面的代码
TraceTraceMode = TraceModeSortByCategory
TraceMode属性设置了跟蹤支持的模式
SortByCategory根据类型对跟蹤信息排序
SortByTime 根据执行次序对跟蹤信息进行显示
因为我们选择了根据类别排序模式因此图显示了信息按类别排序了
TraceWarn(Page_Load Page loaded)
Warn属性把消息显示为红色注意这是个重载的方法在例子中我们给它传递了两个参数第一个输入类别(Category)第二个参数是为取得消息(Message)的
除了使用Trace类设置跟蹤模式之外你还可以使用页面指令指定跟蹤模式
<%@ Page Language=vb Trace=true TraceMode=SortByCategory AutoEventWireup=false Codebehind=WebFormaspxvb Inherits=WebApplicationWebForm %>
应用程序跟蹤
最后一部分讨论了页面追蹤它追蹤页面内的执行信息流ASPNET同时支持应用程序级的追蹤应用程序级的追蹤在nfig文件中设置在trace段下面
<trace enabled=false requestLimit= pageOutput=false traceMode=SortByTime localOnly=true />
为了激活应用程序级追蹤设置下面的值
当应用程序被载入后追蹤信息没有显示在页面上为了查看追蹤信息我们需要使用追蹤查看器(traceaxd)
图应用程序级的追蹤图显示了应用程序的最后的六个请求的追蹤信息如果要查看每个请求的细节信息点击每一行的View Details链接
注意如果在nfig文件中trace被设置为true并且在页面指令中它被设置为false追蹤将被禁止
总结
ASPNET使调试Web应用程序容易多了现在你已经知道了如何使用追蹤试用一下看看它把你的效率提高了多少!