当前位置: 首页 > 图文教程 > 网络编程 > ASP > ASP 3.0高级编程(三十五)

ASP
ASP基础讲座(下)
解决IIS5 HTTP500内部错误
ASP 3.0高级编程(四十六)
ASP 3.0高级编程(四十五)
ASP 3.0高级编程(四十四)
ASP 3.0高级编程(四十三)
ASP 3.0高级编程(四十二)
ASP 3.0高级编程(四十一)
ASP 3.0高级编程(三十九)
ASP 3.0高级编程(三十八)
ASP 3.0高级编程(三十七)
ASP 3.0高级编程(三十六)
ASP 3.0高级编程(三十五)
ASP 3.0高级编程(三十四)
ASP 3.0高级编程(三十三)
ASP 3.0高级编程(三十二)
ASP 3.0高级编程(三十一)
ASP错误代码说明
jscript错误代码及相应解释大全
ASP错误处理

ASP 3.0高级编程(三十五)


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

7.5.1 常规调试技术
在第2章中,已经看到如何使用Response.Write方法以及Request集合来显示集合的内容。如果代码要使用来自请求的值,首先要做的是保证所需的值存在。很容易出现的问题是错拼或改变的<FORM>网页中HTML控件的名字,或者创建附加在URL后面的查询字符串时出现了错误的客户端。
1. 显示各种集合内容
当程序试图使用用户提供的值运行时,可能没有得到所期望的结果,或者什么结果也没得到。记住,引用Request对象的集合中一个并不存在的值(例如,在窗体上没有一个名为“ThisControl”的控件时,使用Request.Form("ThisControl")不会引起错误。结果可能只得到一个空字符串。如果期望查找存储在用户的Session对象或全局Application对象变量中的数值,同样可能出现这种情况。
如果创建一个页面用来显示所有Request对象集合、Session和Application对象的Contents和StaticContens集合的内容,可以任何网页使用Server.Execute对其进行访问。所需要做的工作是把下面程序行加到ASP网页中,用来显示集合的全部内容。当然,根据服务器上文件存放的位置,必须给文件设置相应的路径。
<% Server.Execute "/path_to_file/debug_Request.asp" %>
这是一种很好的方法,保证我们希望在Request、Session和Application集合中找到的任何值确实存在,并且包含了合适的值。在本书的示例文件Chapter07子目录中提供了一个相应的文件,取名为debug_Request.asp。它基本上是用于第2章的show_request.asp网页和用于第3章的show_application.asp和show_session.asp网页的一个组合,但删除了部分HTML程序代码。它只是简单地遍历了集合并把值放到当前页面中。
可以通过运行“Custom Error Page”实例来查看这个页面。这个实例在本章前面看到过,打开时请选中“Display debugging information”复选框,或者直接在chapter07目录中的主菜单网页中打开。
2. 显示中间值
在网页中查看运行情况的第二个方法是显示网页运行时变量的值.当大概知道了错误来自何处,哪个变量在起作用时,这种传统技术还是不能废弃的。但由于IIS 5.0网页缓冲方式的改变,使得使用这项技术比较困难。
在ASP和IIS的先前版本中,缺省时关闭页面缓冲,并且几乎没有人想到将缓冲打开(使用Response.Buffer = True打开),除非想使用Response.Redirect完成网页的再定向(参看第2章)。响应多个请求时,由于缓冲减小了网页间切换的次数,从而提高了IIS的效率。
然而,当出现一个使运行停止的运行期错误时,IIS自动调用Response.Clear方法,再调用Server.Execute来装入定制错误网页,因此写进网页的任何输出都丢失了。解决方法是暂时增加下面的程序行:
<% Response.Buffer = False %>
此程序行放在页面顶部<@LANGUAGE...>指令后面,任何由Response.Write语句生成的调试输出将出现在定制错误网页的顶部。记住在完成网页调试之后将它去掉。
强行使程序运行通过一个错误点,然后显示可疑的变量值,这种方法有时也是有用的。只需在网页开始处附近增加On Error Resume Next语句,然后就能访问Err对象(在VBScript中),并显示错误号、错误源和描述。
3. 检查组件属性值
如果使用的组件具有在ASP脚本代码中设置的属性,在完成设置之后,并且调用组件方法之前和之后,能通过显示所有属性(或仅是可疑的属性)来跟踪错误。当一个方法运行时,可能发现属性值意外地被组件改变了,这或许是故意的,或者是因为组件中的缺陷。没有亲自检查实际代码,不要做任何假设。

7.5.2 Microsoft Script Debugger
当开发更复杂的处理实际任务的应用程序时,经常需要一个更加强大的工具来进行调试。Microsoft Script Debugger(微软脚本调试器)是一种允许调试运行在客户机和服务器上的脚本的调试工具。它能用于任何启用ActiveX的脚本语言(包括VBScript和JScript)编写的程序,也能够用来调试对Java applet、Java Bean和ActiveX组件的调用。
在研究这个工具之前,先简要说明一些问题。如前所述,ASP应用程序由两种脚本组成,一种是客户端脚本,一种是服务器端脚本。客户端脚本通常由VBScript或JScript脚本语句组成,当其到达客户端时出现在HTML页面中并在此执行,可能是在载入文档时或是在对一些事件的响应中。服务器端脚本通常也由VBScript或JScript语句组成。当浏览器请示网页时,服务器端脚本由IIS执行。在下面的讨论中,将讨论服务器端脚本调试的方法。然而所讨论的许多技术也可用于客户端脚本调试。
1. 服务器端的调试
为了调试服务器端脚本,在运行IIS的计算机上运行脚本调试器,然而在使用脚本调试器之前,必须启用调试。为了使性能最优化,基于ASP的应用程序在缺省情况下关闭了调试功能。
注意,不要对生产性的应用程序(即处于活动状态的并被他人使用的公用网站)打开调试功能。这样会减慢整个应用程序的运行,并且错误能使网页出现不确定的停止运行情况。
调试仅能为虚拟应用程序和整个Web网站进行设置,为了启用调试,打开应用程序或站点的Properties对话框,在Home Directory选项卡中,点击Configuration按钮,在Application Configuration对话框的App Debugging选项卡中,选择Enable ASP server-side script debugger,下面准备调试我们的应用程序。

注意Application Configuration对话框包含一个复选框,能够启用客户端脚本调试。这一点在IIS 5.0中没有实现,在文档中仅标记为“reserved for future use”。如果通常的500-100.asp定制错误页面不可用,Script Error messages部分中包含将文本。
(1) 处理服务器脚本
不像客户端脚本,基于ASP应用程序脚本不是事件驱动的。当客户端要求一个来自服务器的网页时,服务器读取网页内容,并处理所有的服务器脚本(即在<%...%>和<SCRIPT RUNAT="SERVER"></SCRIPT>段中的所有内容),也包括在HTML文本中的“行内”脚本段内容,例如:
The valve of the result is: <% = strResult %>
处理流程显示框图中
当IIS载入网页时将处理ASP页面中的所有脚本,在任何输出送给客户端之前,ASP及脚本引擎能够捕获语法和运行期错误(除非你关闭缓冲或调用Response.Flush方法)。
(2) 脚本调试器提供的帮助
启用脚本调试时,如果出现错误,在服务器屏幕上可以看到一个描述ASP代码错误的对话框,点击OK,然后调入当前ASP网页的一个只读拷贝,打开的脚本调试器,错误出现的行由箭头指示

这里,错误的产生是由于出现了Page Counter对象方法的名字错误,应是PageHit而不是DoPageHit。同时,脚本调试器找到了错误并且终止了页面的运行,工具条上的按钮用于程序的继续运行、单步程序运行或者终止页面的处理。
工具条最右边的按钮打开脚本调试器中的Immediate窗口,可以用它和页面进行交互,并且很可能找到出错的地方。例如,可以查询或者设置变量值或组件属性,可以执行内部函数和子程序、自定义函数和子程序以及已经创建的对象方法等。在图中,调用了Page Counter组件的PageHit方法,然后查询Hits属性以得到正在运行的脚本中该处的值。
为了了解为什么在“公共”网站上不应使用脚本调试器,可以从客户机上打开一个包含服务器端错误的页面。在这种情况下,错误信息对话框出现在服务器上,脚本调试器也在服务器上打开。在客户机上,直到运行在服务器上的脚本调试器关闭,才开始载入该页面。
(3) 启动和使用调试器
启用脚本调试后,虚拟应用程序的网页中出现错误时,脚本调试器自动