工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛
您的位置:软件 > 开发者网络 > 微软开发专栏 > Visual Studio.net专栏 > ASP.net > 正文
调试ASP.NET应用程序的方法和技巧
[文章信息]
作者:陶刚编译
时间:2005-03-07
出处:天极网
责任编辑:方舟
[文章导读]
以前使用ASP开发过Web应用程序的人员肯定知道调试Web应用程序是多么麻烦
advertisement
热点推荐
· Linux操作系统下光盘刻录实战
· 设计欣赏:《梦境》之 风中的停歇
· Excel动画:添加数据说明文字
· 全面解析“网络钓鱼”式攻击
· 加快系统文件复制速度必杀技
[正文]

1 2  下一页

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

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

  使用Trace类

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

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


图1.填充默认的WebForm1

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


图2.激活跟踪

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

Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load
 '此处放置初始化页面的用户代码
 Trace.Write("Page loaded")
 If Not IsPostBack Then
  Trace.Write("Not in a postback")
  ' postback发生的时候执行一些操作
 Else
  Trace.Write("In a postback")
  ' 执行一些操作
 End If
End Sub

  我同样想知道当ListBox数据项被选择的时候是否发生了postback:

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As _
System.Object, _
ByVal e As System.EventArgs) Handles _
 ListBox1.SelectedIndexChanged
 Trace.Write("Listbox postback")
End Sub

  当上面的ASP.NET应用程序执行时,将显示下面的输出结果(图3所示):


图3.显示跟踪信息

  你可以发现,当第一次载入WebForm1的时候,你可以看到字符串"Page loaded"和"Not in a postback"。如果你点击WebForm1上的按钮,你可以看到图4所示的记录。与此类似,如果点击了ListBox,也会显示"Listbox postback"字符串。


图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("Page loaded")

  而是:

Trace.Warn("Page loaded")

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


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

  对跟踪信息排序

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

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

Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load
 Trace.TraceMode = TraceMode.SortByCategory
 '此处放置初始化页面的用户代码
 Trace.Warn("Page_Load", "Page loaded")
 If Not IsPostBack Then
  ' 执行一些操作
  Trace.Warn("Page_Load", "Not in a postback")
 Else
  Trace.Warn("Page_Load", "In a postback")
 End If
End Sub

Private Sub ListBox1_SelectedIndexChanged(ByVal sender _
As System.Object, ByVal e As _
System.EventArgs) Handles _
 ListBox1.SelectedIndexChanged
 Trace.Warn("ListBox", "Listbox postback")
End Sub

  执行这个例子的时候,将显示下面的调试信息,它根据类别分组了(图6所示):


图6.按类别排序

  让我们分析上面的代码:

Trace.TraceMode = TraceMode.SortByCategory

  TraceMode属性设置了跟踪支持的模式:

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

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

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

Trace.Warn("Page_Load", "Page loaded")

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

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

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


1 2  下一页

天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 
发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • 优化ASP.NET应用程序性能研究与探讨
  • ASP.NET中用healthMonitor属性用法
  • ASP.NET中使用表别名的多表查询
  • ASP.NET中利用存储过程实现模糊查询
  • ASP.NET程序中用Repeater实现分页
  • 盛大董事长陈天桥:参股新浪只是一个开始
  • 6C联盟降低DVD收费标准 国内厂商持观望态度
  • 施均格接替出井伸之担任索尼公司首席执行官
  • 电脑报:涉嫌赌博 盛大“劫天牢”调查
  • 英特尔日本“回扣风波”未了 又遭欧盟调查
  • 黄宏生建议国家投1500亿美元搞10年科技会战
  • CINCOM公司发力2005:做软件我们最在行
  • UPS潜行中国 从快递巨头向供应链集团转变
  • Advertisement

    天极无线


    奇妙科幻|美好风光|清风车影|漫画卡通|星座生肖|明星写真|动物世界
    老鼠爱大米
    挥着翅膀的女孩
    女人味
    栀子花开
    白月光
    刚刚好
    江南
    快乐崇拜
    亲爱的你怎么不在我身边
    小薇
    2002年的第一场雪
    有多少爱可以重来
    我的地盘
    七里香
    情人
     
    老鼠爱大米 老板电话
    冲动的惩罚 七里香
    我不是黄蓉 女生撒娇
    盛夏的果实 坚持到底
    孤单北半球 眉飞色舞
    挪威的森林 可爱女人
    最浪漫的事 老板电话

    CSEEK搜索