当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 调试ASP.NET应用程序的方法和技巧

ASP.NET
asp.net css注释的影响
ASP.NET与数据库相关技巧
关于HtmlForm控件
三色交替的下拉列表框
精通ASP.NET中弹出窗口技术
ASP.NET Forums与现有系统整合方案示例
ASP.NET操作IIS中的虚拟目录
DataGrid与SQL Server 2000数据绑定
如何让Web应用程序在Client端实现导出报表功能
如何保证web app中的Send Email线程稳定性
关于用ASP.Net识别远程主机服务器种类
ASP.NET中上传下载文件
提高ASP.NET性能的方法
asp.net StreamReader 创建文件
asp.net如何生成图片验证码(简单)
一个.net 压缩位图至JPEG的代码
简单的SQL Server数据库数据读取与数据操作
获取网站的RSS聚合到自己的网页
.Net程序中整站通用的防SQL注入函数
asp.net生成缩略图及给原始图加水印的函数

调试ASP.NET应用程序的方法和技巧


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 72 ::
收藏到网摘: n/a

以前使用ASP开发过Web应用程序的人员肯定知道调试Web应用程序是多么麻烦。在ASP中,调试是痛苦的,通常包括了使用Response.Write()方法输出变量的值。那么请问一下自己:你有多少次忘记了在布署应用程序之前删除了调试语句?

随着.NET框架组件的出现这种情况发生了彻底的改变。在.NET中,你可以使用VisualStudio.NET中的调试程序跟踪整个Web应用程序的执行,或者使用System.Web.TraceContext名字空间中的Trace类。本文演示如何使用Trace类辅助你的调试工作。

使用Trace类

ASP.NET中包含了一个帮助跟踪应用程序信息流的Trace类。作为使用Response对象进行调试的代替,你现在可以使用Trace类打印出调试信息了。

为了演示它的使用,我们首先建立一个ASP.NETWeb应用程序,并在默认的WebForm1上放置一个Button和一个ListBox控件(如图1所示)。用三个项填充ListBox控件并把它的AutoPostBack属性设置为True。


图1.填充默认的WebForm1
对于本文,我希望跟踪应用程序的执行流。首先,激活跟踪,页面指令要求含有Trace属性,它的值设置为True(切换到查看HTML源模式),如图2所示。


图2.激活跟踪
下一步,我在Form的load事件中插入Trace语句,这样我就知道是否发生了Postback。PostBack事件是ASP.NET中的最容易混乱的一个特性,它经常导致初用ASP.NET的开发者的失败。

PrivateSubPage_Load(ByValsenderAsSystem.Object,_
ByValeAsSystem.EventArgs)_
HandlesMyBase.Load
 '此处放置初始化页面的用户代码
 Trace.Write("Pageloaded")
 IfNotIsPostBackThen
Trace.Write("Notinapostback")
'postback发生的时候执行一些操作
 Else
Trace.Write("Inapostback")
'执行一些操作
 EndIf
EndSub
我同样想知道当ListBox数据项被选择的时候是否发生了postback:

PrivateSubListBox1_SelectedIndexChanged(ByValsenderAs_
System.Object,_
ByValeAsSystem.EventArgs)Handles_
 ListBox1.SelectedIndexChanged
 Trace.Write("Listboxpostback")
EndSub
当上面的ASP.NET应用程序执行时,将显示下面的输出结果(图3所示):


图3.显示跟踪信息
你可以发现,当第一次载入WebForm1的时候,你可以看到字符串"Pageloaded"和"Notinapostback"。如果你点击WebForm1上的按钮,你可以看到图4所示的记录。与此类似,如果点击了ListBox,也会显示"Listboxpostback"字符串。


图4.检查跟踪信息
跟踪页面包含下面的部分(图3中没有显示所有的信息):

段描述请求细节描述与请求相关的信息,例如对话ID、编码和请求的时间。跟踪信息包含当前运行的应用程序的详细信息。跟踪信息显示在这个部分中。控件树显示某个页面中控件的信息和Viewstate隐藏字段的大小。Cookie集合显示页面和它的值设置的cookie。头集合显示HTTP头信息,例如内容长度和用户代理。窗体集合显示某个页面中控件的名称和它们的值。服务器变量显示服务器端的环境变量。
注意,我们的跟踪信息显示在"跟踪信息段"的下面。如果要关闭跟踪,只需要简单地把页面指令中Trace的属性设置为False。没有必要删除应用程序中的跟踪指令,现在关闭调试仅仅是设置一个布尔值这么简单了。

打开/关闭跟踪只是简单地修改页面指令中的Trace属性的值。你也可以使用Trace类编程关闭跟踪。Trace类的成员如下:

属性描述IsEnabled表明是否激活对当前请求的跟踪。TraceMode设置跟踪模式:sortByCategory或sortByTime。
方法描述Warn把跟踪信息显示为红色。Write写跟踪信息。
要编程关闭跟踪,可以在WebForm1的load事件中使用下面的语句:

Trace.IsEnabled=false
在我们的例子中,跟踪信息没有很显目的显示,因此它被其它的跟踪信息掩埋了。Trace类的Warn()方法可以把跟踪信息打印为红色。因此不是这样编写代码:

Trace.Write("Pageloaded")
而是:

Trace.Warn("Pageloaded")
图5显示了Warn()方法用红色显示的调试信息。


图5.使用Warn()方法用红色显示跟踪信息
对跟踪信息排序

把多个跟踪语句放在一个应用程序中有时会显得杂乱。如果你的跟踪信息可以被分为不同的类别,那么跟踪就更容易了。Trace类允许我们基于种类对跟踪信息进行分类和排序。

下面的例子演示了如何对跟踪信息按类别进行分组:

PrivateSubPage_Load(ByValsenderAsSystem.Object,_
ByValeAsSystem.EventArgs)_
HandlesMyBase.Load
 Trace.TraceMode=TraceMode.SortByCategory
 '此处放置初始化页面的用户代码
 Trace.Warn("Page_Load","Pageloaded")
 IfNotIsPostBackThen
'执行一些操作
Trace.Warn("Page_Load","Notinapostback")
 Else
Trace.Warn("Page_Load","Inapostback")
 EndIf
EndSub

PrivateSubListBox1_SelectedIndexChanged(ByValsender_
AsSystem.Object,ByValeAs_
System.EventArgs)Handles_
 ListBox1.SelectedIndexChanged
 Trace.Warn("ListBox","Listboxpostback")
EndSub
执行这个例子的时候,将显示下面的调试信息,它根据类别分组了(图6所示):


图6.按类别排序
让我们分析上面的代码:

Trace.TraceMode=TraceMode.SortByCategory
TraceMode属性设置了跟踪支持的模式:

·SortByCategory:根据类型对跟踪信息排序。

·SortByTime:根据执行次序对跟踪信息进行显示。

因为我们选择了根据类别排序模式,因此图7显示了信息按类别排序了。

Trace.Warn("Page_Load","Pageloaded")
Warn属性把消息显示为红色,注意这是个重载的方法。在例子中,我们给它传递了两个参数。第一个输入类别(Category),第二个参数是为取得消息(Message)的。

除了使用Trace类设置跟踪模式之外,你还可以使用页面指令指定跟踪模式:

<%@PageLanguage="vb"Trace="true"TraceMode="SortByCategory"AutoEventWireup="false"Codebehind="WebForm1.aspx.vb"Inherits="WebApplication1.WebForm1"%>

应用程序跟踪

最后一部分讨论了页面追踪,它追踪页面内的执行信息流。ASP.NET同时支持应用程序级的追踪,应用程序级的追踪在web.config文件中设置,在trace段下面:


为了激活应用程序级追踪,设置下面的值:

属性值描述EnabledTrue激活或禁止应用程序级追踪。requestLimit10设置追踪的请求的最大数量。pageOutputFalse在页面的末尾显示追踪信息。traceModesortByTime追踪信息排序方式。localOnlyTrue设置在非本地计算机上查看追踪浏览器的能力。
当应用程序被载入后,追踪信息没有显示在页面上。为了查看追踪信息,我们需要使用追踪查看器(trace.axd):


图7.应用程序级的追踪
图7显示了应用程序的最后的六个请求的追踪信息。如果要查看每个请求的细节信息,点击每一行的"ViewDetails"链接。

注意,如果在web.config文件中trace被设置为true,并且在页面指令中它被设置为false,追踪将被禁止。

总结

ASP.NET使调试Web应用程序容易多了。现在你已经知道了如何使用追踪,试用一下,看看它把你的效率提高了多少!