无论是否有经验,您都可能会遇到程序错误,这将影响服务器端脚本正常工作。因此,为了成功开发强大的 ASP 应用程序,特别是当应用程序变得越来越复杂时,查找和改正脚本错误的调试过程就显得极其重要。
Microsoft Script Debugger 是一个强大的调试工具,可以帮助您快速定位错误,并可以交互测试服务器端脚本。脚本调试器还可以与 Windows Internet Explorer 3.0 或更高版本一起使用,使用它,您可以:
注意 可以使用调试器查看脚本和定位错误,但不能直接编辑脚本。要更正错误,必须使用编辑程序编辑脚本,保存更改,然后再次运行此脚本。
开始调试服务器端脚本之前,首先必须将 Web 服务器配置为支持 ASP 调试。有关指导和信息,请参阅启用 ASP 调试。
启用 Web 服务器调试后,您可以使用下列任意一种方法调试脚本:
调试服务器端脚本的过程中,可能会遇见几种类型的错误。有些错误可能会导致脚本无法正确执行、中断程序的执行或返回错误的结果。
“语法”错误是一种经常遇到的错误,它是由于脚本语法不正确引起的。例如,命令拼写错误或传递给函数的参数数目不对都可能产生错误。如果语法不正确,脚本将无法执行。
“运行时”错误发生在脚本开始执行之后,它是由于脚本指令试图执行不可能的操作而引起的。例如,下列脚本包含一个函数,此函数以 0 作为变量的除数(这是一种非法的数学运算),将产生运行时错误:
<SCRIPT LANGUAGE=VBScript RUNAT=SERVER>
Result = Findanswer(15)
Document.Write ("结果是 " &Result)
Function Findanswer(x)
'此语句产生运行时错误。
Findanswer = x/0
End Function
</SCRIPT>
必须更正运行时错误,脚本才会无中断执行。
逻辑错误是最难以发现的错误。逻辑错误是由于键入错误或程序逻辑上的缺陷引起的,脚本能够运行,但产生的结果不正确。例如,如果服务器端脚本将对列表中的值进行排序,但在脚本中本该使用 < 符号(小于号)比较值的地方错误地使用了 > 符号(大于号),将导致排序结果不正确。
您可以使用几种不同的调试技术定位错误源并测试应用程序。
当运行时错误中断了服务器端脚本执行时,Microsoft Script Debugger 自动启动,显示一个 .asp 文件,其中的语句指针指向导致错误的行,并生成错误消息。使用这种类型的调试(也叫“实时调试”),计算机将暂停进一步执行程序。您必须使用编辑程序更正错误并保存所作更改,然后才能继续运行脚本。
当发生错误但无法轻松地找到错误源的时候,预先设置“断点”有时会很有用。断点在指定的脚本行暂停执行脚本。可以在可疑的脚本行前面设置一个或多个不同的断点,然后使用调试器检查脚本中设置的变量或属性的值。更正错误后,可以清除断点,这样脚本就可以无间断地运行。
要设置断点,可以使用脚本调试器打开脚本,选择脚本中希望中断执行的行,然后从“调试”菜单中选择“切换断点”。然后使用 Web 浏览器重新请求脚本。执行到设置了断点的脚本行时,计算机启动脚本调试器,它将显示脚本,并且语句指针指向设置了断点的行。
在某些情况下,如果要运行的下一条语句不在您所工作的 .asp 文件中,您可能希望启用脚本调试器“在下一条语句中断”。例如,如果在 Sales 应用程序中的 .asp 文件中设置了“在下一条语句中断”,则当运行 Sales 应用程序(或已经启用了调试的应用程序)中任何文件中的脚本时,都将启动调试器。有鉴于此,当设置“在下一条语句中断”时,您需要注意,无论下一条运行的是何种脚本语句,都将启动调试器。
也可以向使用 VBScript 编写的服务器端脚本中添加断点,方法是在服务器端脚本的可疑部分之前的某个位置插入一个 Stop 语句。例如,下列服务器端脚本包含一条 Stop 语句,此语句将在脚本调用自定义函数之前暂停执行脚本:
<%
intDay = Day(Now())
lngAccount = Request.Form("AccountNumber")
dtmExpires = Request.Form("ExpirationDate")
strCustomerID = "RETAIL" & intDay & lngAccount & dtmExpires
'在此设置断点。
Stop
'调用注册组件。
RegisterUser(strCustomerID)
%>
请求此脚本时,调试器启动并自动显示 .asp 文件,并且用语句指针指示出 Stop 语句的位置。在此断点处,您可以选择检查在将变量传递给组件之前赋给变量的值。
要点 必须将 Stop 语句从生成的 .asp 文件中删除。
要向使用 VBScript 编写的服务器端脚本中添加断点,请在脚本的可疑行之前插入一个 debugger 语句。例如,下列脚本中包含一个 debugger 语句,每次脚本循环通过一个新值时都将中断执行,并自动启动脚本调试器。
<%@ LANGUAGE=JScript %>
<%
for (var count = 1; count <= 10; count++)
{
var eventest = count%2
//设置断点,使用户可以单步执行脚本。
debugger
if (eventest == 0)
Response.Write("平均值是 " + count + "<br>")
}
%>
必须将 debugger 语句从生成的 .asp 文件中删除。
注意 不要将 debugger 语句与 JScript 的 break 语句混淆。break 语句在执行期间退出当前正在运行的循环,并不激活 Microsoft Script Debugger,也不暂停执行。
除了脚本调试器,一套优秀的调试技巧可以大大减少研究脚本错误源所花费的时间。虽然大多数错误的来源很明显(如命令拼写错误或缺少变量),但某些类型的逻辑错误和执行错误很难发现。
有关 Microsoft Script Debugger 的详细信息,请参阅 Windows Script Technologies。