当前位置:首页 » 网站技术 » ASP

调试 ASP 脚本 [1]

...


  无论您的计划多么精密、经验多么丰富,脚本错误(bug)可能在最初就使您的 ASP服务器端的脚本无法正确运行。也就是说调试,即查找和纠正脚本错误,对开发一个成功的和强健的 ASP程序是非常重要的。

Microsoft脚本调试工具
  Microsoft? Script Debugger是一个功能强大的调试工具,它能帮助您迅速查找错误并对服务器端的脚本进行交互测试。Script Debugger与 Windows Internet Explorer 3.0版本或更新的版本一起工作。通过它,您可以:

  逐行运行服务器端脚本。

  在服务器端脚本执行时,打开命令窗口监视变量、属性或数组元素的值。

  在特定行设置暂停标记,挂起服务器端脚本(使用调试工具或脚本命令)。

  在运行服务器端脚本时跟踪过程。

  注意您可以使用调试工具查看脚本并找到错误所在,但是不能直接编辑脚本。要想改正错误,必须用编辑器编辑脚本然后保存,再运行脚本。

  详细信息,请参阅 Microsoft脚本调试程序.

  (该功能不能用于 Windows 95或更高的版本。)

启用调试
  在开始调试服务器端脚本之前,您必须首先配置 Web服务器,使其支持 ASP调试。有关配置命令及信息,请参阅启用 ASP调试。

  在启用 Web服务器调试之后,就可以使用下面的任一方法调试脚本:

  手工打开 Microsoft脚本调试器,调试 ASP服务器端脚本。

  使用 Internet Explorer请求 .asp文件。如果该文件包含错误或人为添加的停止执行语句,那么 Microsoft脚本调试程序将自动启动,显示该脚本,并且指出错误来源。

  脚本错误

  调试服务器端脚本时,您可能会碰到各种类型的错误。其中的某些错误使脚本无法正确执行、程序停止执行或返回错误结果。

  语法错误

  语法错误是经常碰到的错误,它是由不正确的脚本语法导致的。例如,命令拼写错误或传递给函数的参数不正确都将产生错误。语法错误可能导致您的脚本不能运行。

  运行时错误

  运行时错误是脚本在执行过程中脚本指令试图执行不可能的动作而导致的。例如,下面的脚本中包含一个被零除(一种非法的数学运算)的函数,将产生运行时错误:

  <script language = "VBScript" runat = server>

  Result = Findanswer(15)

  document.write ("The answer is " &Result)

  Function Findanswer(x)

  'This statement generates a run-time error.

  Findanswer = x/0

  End Function

  </script>

  必须纠正导致运行时错误的错误,这样才能使脚本在运行时不被中断。

  逻辑错误

  逻辑错误通常可能是潜在和难以检测的。如果有因键入错误或程序逻辑流程错误引起的逻辑错误,脚本可能会成功运行,但产生的结果却是错的。例如,一服务器端脚本计划对一个值列表排序,如果本应使用 “<”符号比较数值,但却使用了“ >”符号,那么将返回不正确的排序结果。

错误调试技术
  可以使用多种不同的调试技术来查找错误的根源并测试应用程序。

  实时 (Just-In-Time, JIT)调试

  当一个运行时错误中断了 ASP脚本的执行时,Microsoft脚本调试程序自动启动,显示 .asp文件,将语句指针指向导致错误的行,并产生错误消息。这种调试方式称为实时 (JIT)调试,计算机将暂停程序的执行。必须用编辑程序纠正这些错误,保存所做的修正,然后再运行脚本。

  断点调试

  当一个错误发生并且很难找到错误的根源时,可使用预设断点的调试方法。断点将脚本暂停在特定一行。可以在脚本中有疑问处设置一个或多个不同的断点,然后使用调试器去改正脚本中设置的变量或属性的值。当您纠正这些错误之后,可以清除断点以便您的脚本能不间断地运行。

  请用 Microsoft脚本调试程序打开脚本,设置断点。然后用 Web浏览器请求此脚本。当执行到脚本中含有断点的行时,计算机启动脚本调试程序,并且语句指针会指在设置了断点的行上。

  VBScript Stop语句调试器

  通过在服务器端脚本中有问题的部分前面插入 Stop语句,您也可以将断点添加到用 VBScript编写的服务器端脚本中。例如,下面的 ASP脚本包含一个 Stop语句,用来在显示结果之前暂停执行:

  <%

  dayvalue = 3

  TheDay = WeekDayName(dayvalue)

  Stop 'set breakpoint here.

  Response.Write("Today is " + TheDay)

  %>

  当您在请求 Web浏览器使用的先前的脚本时,调试程序启动并自动显示 .asp文件,而且语句指针会指示 stop语句的位置。一定要记住从交付使用的 .asp文件中删除 Stop语句。

  用 JScript Debugger语句调试

  要将断点加到用 Microsoft? JScript编写的服务器端脚本中,可在有疑问的行前插入 debugger语句。例如,下面的脚本包含了 debugger语句,每次脚本循环到一个新值时,就会中断执行并自动启动 Microsoft脚本调试程序。

  <%@ Language="JScript" %>

  <%

  for (var count = 1; count <= 10; count++) {

  var eventest = count%2;

  debugger //Sets breakpoint

  if (eventest == 0) {

  response.write("Even value is " + count + "<br>")

  }

  }

  %>

  请记住从交付使用的 .asp文件中删除 debugger语句。

  注意不要混淆 debugger语句和 JScript break语句。在程序执行期间,break语句仅退出当前循环,并不激活 Microsoft脚本调试器,也不暂停程序的执行。

脚本调试技巧
  除脚本调试程序外,一套好的调试技巧也能减少花费在分析脚本错误根源上的大量时间。尽管大部分错误是由显而易见的根源导致的,但命令拼写错误或丢失变量、某种类型的逻辑和执行错误也可能因不太明显的根源所致。详细信息,请参阅 Microsoft脚本调试程序文档的“调试技巧”部分。

管理会话
  成功开发 Web应用程序的难题之一是在一次用户访问,即会话期间,当用户在一个应用程序的页与页之间跳转的同时,维护用户信息。HTTP是一种无状态协议,也就是说,Web服务器将某页的每次访问都当作相互无关的访问来处理;服务器不保留前一次访问的任何信息,即使访问就发生在当前访问的几秒钟之前。正因为这种不记忆以前访问的特性使得编写联机目录之类的应用程序很困难,此类应用程序可能需要跟踪用户在目录的不同页间跳转的同时曾选择过的目录项。

  ASP提供了一个管理会话信息问题的独特方案。使用 ASP Session对象和由您的服务器生成的特殊用户 ID,您可以创建一个智能应用程序,该应用程序可以识别每个来访的用户并收集应用程序跟踪用户的首选项或选择内容所要用到的信息。

  ASP通过 HTTP cookie设置用户 ID。HTTP cookie是存储在用户浏览器上的小文件。因此,如果您正在为不支持 cookie的浏览器创建应用程序,或者您的客户将浏览器设置为不接受 cookie,请不要使用 ASP的会话管理功能。

  您也可以编写在应用程序启动或结束时运行的脚本。有关定义应用程序启动事件或应用程序结束事件的信息,请参阅 Global.asa参考。

  启动和结束会话

  会话可以通过三种方式启动:

  一个新用户请求访问一个 URL,该 URL标识了某个应用程序中的 .asp文件,并且该应用程序的 Global.asa文件包含 Session_OnStart过程

  用户在 Session对象中存储了一个值。

  用户请求了一个应用程序的 .asp文件,并且该应用程序的 Global.asa文件使用 <OBJECT>标签创建带有会话作用域的对象的实例。有关使用 <OBJECT>标签创建带有会话作用域的对象的实例的详细信息,请参阅使用组件。

  如果用户在指定时间内没有请求或刷新应用程序中的任何页,会话将自动结束。这段时间的默认值是 20分钟。可以通过在 Internet服务管理器中设置“应用程序选项”属性页中的“会话超时”属性改变应用程序的默认超时限制设置。应依据您的 Web应用程序的要求和服务器的内存空间来设置此值。例如,如果您希望浏览您的 Web应用程序的用户在每一页仅停留几分钟,就应该缩短会话的默认超时值。过长的会话超时值将导致打开的会话过多而耗尽您的服务器的内存资源。

  对于一个特定的会话,如果您想设置一个小于默认超时值的超时值,可以设置 Session对象的 Timeout属性。例如,下面这段脚本将超时值设置为 5分钟。

  <% Session.Timeout = 5 %>

  您也可以设置一个大于默认设置的超时值,Session.Timeout属性决定超时值。

  您也可以通过 Session对象的 Abandon方法显式结束一个会话。例如,在表格中提供一个“退出”按钮,将按钮的 ACTION参数设置为包含下列命令的 .asp文件的 URL。

  <% Session.Abandon %>

  关于 SessionID和 Cookie

  当用户第一次请求给定的应用程序中的 .asp文件时,ASP生成一个 SessionID。 SessionID是由一个复杂算法生成的号码,它唯一标识每个用户会话。在新会话开始时,服务器将 Session ID作为一个 cookie存储在用户的 Web浏览器中。

  SessionID与钥匙很相似,当会话期间用户与应用程序交互时,ASP可以将用户信息存储在服务器的一个“保险箱”中。正象用钥匙能存取保险箱中物品一样,通过在 HTTP请求标题中发送的用户 SessionID cookie,就能够对该“保险箱”中的内容进行访问。每当 ASP收到一个页请求时,就检查 HTTP请求标题,以获得 SessionID cookie。

  在将 SessionID cookie存储于用户的浏览器之后,即使用户请求了另一个 .asp文件,或请求了运行在另一个应用程序中的 .asp文件,ASP仍会重用该 cookie跟踪会话。与此相似,如果用户故意放弃会话或让会话超时,然后再请求另一个 .asp文件,那么 ASP将以同一个 cookie开始新的会话。只有当服务器管理员重新启动服务器或用户重新启动 Web浏览器时,此时存储在内存中的 SessionID设置将被清除,用户将会获得新的 SessionID cookie。

  通过重用 SessionID cookie,ASP将发送给用户浏览器的 cookie数量降为最低。另外,如果您决定您的 ASP应用程序不需要会话管理,就可以不让 ASP跟踪会话和向用户发送 SessionID。

  ASP在以下情况下不发送会话的 cookie:

  应用程序的会话状态被禁用。

   ASP页被定义为无会话,即该页包含 <%@ EnableSessionState=False %>标记。详细信息,请参阅无会话的 ASP页。

  请注意,SessionID cookie并不提供跟踪用户对某个 Web站点的多次访问的永久方法。存储在服务器内存中的 SessionID信息很容易丢失。如果想跟踪在很长时间内访问您的 Web应用程序的用户,必须通过在用户的 Web浏览器中存储一个专门的 cookie,并将 cookie信息保存到数据库中来创建一个用户标识。详细信息,请参阅使用 Cookie。

  在 Session对象中存储数据

  Session对象提供了一个可在其中存储信息的动态关联数组。您可以在 Session对象中存储数值变量和对象变量。

  通过对 Session对象中的命名项赋值,可将变量存储在 Session对象中。例如,以下命令将两个新变量存储在 Session对象中:

  <%

  Session("FirstName") = "Jeff"


  Session("LastName") = "Smith"

  %>

  通过访问该命名项可从 Session对象中获取信息。例如,显示 Session("FirstName")的当前值:

  Welcome <%= Session("FirstName") %>

  可以在 Session对象中存储用户的首选项,然后通过访问首选项来决定将哪一页发送给用户。例如,可以允许用户在您的应用程序的第一页中指定纯文本版本的内容并将这一选择应用到用户此后对该应用程序的所有页的访问上。

  <% If Session("ScreenResolution") = "Low" Then %>

  This is the text version of the page.

  <% Else %>

  This is the multimedia version of the page.

  <% End If %>

  您也可以在 Session对象中存储一个对象实例,但这样做会影响服务器的性能。详细信息,请参阅设置对象作用域。

继续阅读
调试 ASP 脚本 [2]
维护 ASP 应用程序的安全 [1]
维护 ASP 应用程序的安全 [2]
ASP.NET 简介
asp.net教程之一:概论(1)
asp.net教程之一:概论(2)
实现ASP文件在线发邮件
用ASP制作彩色校验码的方法
ASP技术访问WEB数据库
发表评论

昵称:
最新评论
暂时没有评论!