追踪ASP.NET代码里的bug

原创 2004年08月15日 17:27:00
 

Web开发中一个棘手的问题是调试。在ASP或者简单JavaScript的时代,开发人员会利用print语句来追踪代码里的问题。随着微软引入ASP.NET,这一方法发生了改变,因为它包含了大量的特性,可以利用TraceContext类更加轻松地调试Web页面。

选择追踪的范围
 
在ASP.NET应用程序里,你可以启动对单个页面或者整个Web应用程序进行追踪的能力。Web.config这个文件用来启动在应用程序这一级别进行的追踪。下面就用到了web.config文件里的追踪元素:

<trace enabled="false" requestLimit="10" pageOutput="false"
traceMode="SortByTime" localOnly="true" />

现在让我们更加仔细地看看其各个属性:

enabled:用来启动(真)和关闭(伪)应用程序这一级别的追踪。
requestLimit:用来描述保存在内存里的追踪数量。
pageOutput:用来指示追踪信息需要(真)还是不需要(伪)附加在每页之后。如果选择了伪,那么追踪信息可以在专门的追踪页面??trace.axd里查看。
traceMode:用来确定如何显示追踪信息。在缺省状态下,它被设置为按时间顺序显示,但是它也可以按类别(SortByCategory)显示。
localOnly:用来指示远程调试可用(伪)或者不可用(真)。
然而,如果应用程序里只有一个页面,那么你就会在追踪的时候碰到问题。在这种情况下,你可以在页面的命令里加上下面的追踪属性,启动对单个页面的追踪:

<%@ Page language="c#" trace="true" tracemode="SortByCategory"
Codebehind="WebForm1.aspx.cs" AutoEventWireup="false"
Inherits="WebApplication1.WebForm1" %>

要注意trace和tracemode属性会和它们在web.config文件里对应的属性发生冲突。如果你还不清楚哪个设置是优先的,那么我告诉你,页面设置会取代web.config的设置,所以你在追踪整个应用程序的时候要启动它,而在追踪所选页面的时候禁用它。是选择页面还是应用程序这一级别(或者是把两者结合起来)进行追踪要根据情况来决定。

处理输出
一旦决定了需要追踪的级别,你就要开始接收追踪的结果了。如果是正在追踪整个应用程序,那么你可以在trace.axd页面里查看所有的追踪结果(具体有多少要取决于你用requestLimit属性维持的数量)。同样的,对单个页面的追踪进行完之后,你可以查看单个页面的追踪。

追踪的输出结果分为五个部分:

请求细节(Request Details):这一部分包括会话的ID、请求时间、编码、请求类型(get、post等等),以及状态码。
追踪信息(Trace Information):用来显示请求的细节,这包括和ASP.NET页面相关的各种事件。
控件树(Control Tree):用来显示页面内使用的控件;这包括其大小和保存在ViewState里的相关字节数。
Cookie集(Cookies Collection):页面所用的cookie的列表。
标题集(Headers Collection):和请求相关的HTTP标题,包括主机(Host)、Cookie和用户代理(User-Agent)。
服务器变量:和请求相关的服务器环境变量的完整列表。

在下面的例子里,我列出了追踪结果的一部分信息。(它包括追踪结果的标题集部分。)


Headers Collection
Name Value
Connection Keep-Alive
Accept */*
Accept-Encoding gzip, deflate
Accept-Language en-us
Cookie ASP.NET_SessionId=vnadwr45jvrfhv55gbdygobs; LastVisited2=3/1/2004
 2:11:35 PM
Host localhost
User-Agent Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR
 1.1.4322)

从这个追踪结果可以看出,发出请求的客户端使用英语和Internet Explorer 6.0,并安装了.NET框架1.1。

加入用户信息
缺省的追踪能力在很多情况下都很有用处,但是其他的情况可能要求获得页面的更多信息。你可以利用TraceContext类的Write(写入)和Warn(警告)方法向追踪日志里添加用户信息:

Write:向追踪日志写入信息。
Warn:向追踪日志写入信息,但是用红色显示写入的信息。
每种方法都在承担着多种任务,大多数基本的句法都会接受简单的信息并将其插入到追踪日志里。这些方法让你能够很轻松地在需要的地方放上Trace.Write和Trace.Warn语句,从而向追踪输出里加入用户信息。其输出被包括在追踪输出的追踪信息部分里。(我觉得使用Warn方法可以更容易地找到我添加的内容,因为它们是以红色显示的。)

不需要重新编译
另一个非常好的特性是,在完成追踪之后,你不需要删除追踪元素;只需要禁用追踪就行了,这样追踪语句会被忽略。当产品中出现问题的时候,其优势就体现出来了。一旦转化成为了产品,你可以激活在应用程序这一级别的追踪,而不对单个页面进行追踪(把pageOutput设置成伪),并通过trace.axd页面来查看追踪结果,这样用户就不会被打扰了。

最后,追踪特性会增加应用程序的负担,这反过来会影响到程序的性能。由于这个原因,你应该只有在需要的时候才在投入生产的应用程序里启动它,而且要(在追踪完成后)尽快禁用它。


--------------------------------------------------------------------------------
本文作者:Tony Patton的职业生涯开始于应用程序开发员,并已经获得了Java、VB、Lotus和XML的认证,以增加其专业知识。

完善的Socket Server程序

/* * Copyright (c) 2000 David Flanagan.  All rights reserved. * This code is from the book Java Exam...
  • skyyoung
  • skyyoung
  • 2002-03-27 10:16:00
  • 1131

BugOnline bug跟踪管理系统 (asp.net+c#+sql server 2005)

  • 2008年01月22日 12:07
  • 2.09MB
  • 下载

c#系统日志

  • 2014年07月03日 10:52
  • 44KB
  • 下载

Android填坑之旅(第八篇)Android中高效的跟踪Bug管理平台

腾讯Bugly 官网传送门BugTags官网传送门网易云捕官网传送门
  • wtt945482445
  • wtt945482445
  • 2017-05-23 21:19:33
  • 404

9个免费开源的bug追踪软件

http://blog.chinaunix.net/uid-7425507-id-134267.html 9个免费开源的bug追踪软件 2010-10-15 13:09:09 分类...
  • csnewdn
  • csnewdn
  • 2016-11-03 09:32:38
  • 936

十大开源BUG跟踪系统

十大开源BUG跟踪系统 在软件开发生命周期(SDLC)跟踪错误是其中一个最重要的步骤没有这一步软件可以是不完整的。这是一个很大的节省时间的添加和管理的错误是在Bug跟踪系统。很少...
  • chenxingcxcy
  • chenxingcxcy
  • 2016-08-16 09:53:19
  • 11338

iOS 发布后的bug跟踪

在ios开发中会碰到的很多crash问题,如果Debug调试模式的话,我们可以往往很容易的根据log的输出定位到导致crash的原因,但对于已经上线的应用,或者是release环境包导致的crash,...
  • bianruifeng
  • bianruifeng
  • 2016-02-04 19:47:09
  • 404

软件测试BUG跟踪(trac工具)

Trac的安装设置目录[隐藏]1 Trac简介2 Trac安装3 Trac设置 3.1 配置Subversion版本库 3.1.1 设置访问Subversion版本库的用户和用户组3.1.2 创建Su...
  • chinayaosir
  • chinayaosir
  • 2013-05-14 00:02:26
  • 1779

18款最佳Bug跟踪管理系统

对于开发者来说,Bug 往往是他们最头疼的问题。有些 Bug 会隐藏的很深,很难发现,甚至用户已经使用了才出现,这样真是赔了名声又折钱。为了让开发者更早地发现和消灭 Bug,本文收集了 18 款最佳的...
  • xhlyp3
  • xhlyp3
  • 2016-11-30 18:32:21
  • 2587

找bug的小技巧

原文链接:http://www.myexception.cn/other/1391145.html 1. 输出语句   代码调试的首要工具就是插入可靠地、真实的输出语句。当输出语句数...
  • u012858622
  • u012858622
  • 2014-03-24 14:54:33
  • 1788
收藏助手
不良信息举报
您举报文章:追踪ASP.NET代码里的bug
举报原因:
原因补充:

(最多只允许输入30个字)