数学建模社区-数学中国

标题: 调试 ASP 脚本 [打印本页]

作者: 韩冰    时间: 2004-10-4 11:00
标题: 调试 ASP 脚本
无论您的计划多么精密、经验多么丰富,脚本错误(bug)可能在最初就使您的 ASP 服务器端的脚本无法正确运行。也就是说调试,即查找和纠正脚本错误,对开发一个成功的和强健的 ASP 程序是非常重要的。/ ^1 u0 D- b0 x! o. q. E1 C6 A Microsoft 脚本调试工具- U( j+ O2 A' J- M! j) V4 k. l2 u Microsoft? Script Debugger 是一个功能强大的调试工具,它能帮助您迅速查找错误并对服务器端的脚本进行交互测试。Script Debugger 与 Windows Internet Explorer 3.0 版本或更新的版本一起工作。通过它,您可以: b8 g, V U* P, p逐行运行服务器端脚本。 # d# L+ t/ i& u2 c* n* p 在服务器端脚本执行时,打开命令窗口监视变量、属性或数组元素的值。 , J1 g G$ |% L" Q8 R+ v) } 在特定行设置暂停标记,挂起服务器端脚本(使用调试工具或脚本命令)。 , E) h1 x6 x' e5 L& u: r) T在运行服务器端脚本时跟踪过程。 - T9 ~2 R% |) s注意 您可以使用调试工具查看脚本并找到错误所在,但是不能直接编辑脚本。要想改正错误,必须用编辑器编辑脚本然后保存,再运行脚本。 ' z( v1 ~+ N$ S9 _2 b; O详细信息,请参阅 Microsoft 脚本调试程序. / D9 q) p9 d- V- V# z(该功能不能用于 Windows 95 或更高的版本。) 4 b2 |2 T7 h1 _1 W' D. \启用调试 ! l/ u' P( _4 h% C' l在开始调试服务器端脚本之前,您必须首先配置 Web 服务器,使其支持 ASP 调试。有关配置命令及信息,请参阅 启用 ASP 调试。( y0 Y7 H1 }7 ~7 Q* p2 e* ` 在启用 Web 服务器调试之后,就可以使用下面的任一方法调试脚本: * w& \7 P! c- F N 手工打开 Microsoft 脚本调试器,调试 ASP 服务器端脚本。 7 z$ \. g) R3 E+ V3 {2 C 使用 Internet Explorer 请求 .asp 文件。如果该文件包含错误或人为添加的停止执行语句,那么 Microsoft 脚本调试程序将自动启动,显示该脚本,并且指出错误来源。 0 t+ W9 K* {+ I 脚本错误 + O2 \2 s% B2 X% R( F, @! }9 J" o调试服务器端脚本时,您可能会碰到各种类型的错误。其中的某些错误使脚本无法正确执行、程序停止执行或返回错误结果。 * P9 f' H9 s1 P( ^. x语法错误( K' [9 ~6 B5 e( D 语法错误是经常碰到的错误,它是由不正确的脚本语法导致的。例如,命令拼写错误或传递给函数的参数不正确都将产生错误。语法错误可能导致您的脚本不能运行。 ) k/ r5 D# g, p' }) L运行时错误 * a3 s; E( X5 j$ ~# ]运行时错误是脚本在执行过程中脚本指令试图执行不可能的动作而导致的。例如,下面的脚本中包含一个被零除(一种非法的数学运算)的函数,将产生运行时错误: 1 I+ E6 G- n5 W% \% n<script language = "VBScript" runat = server> $ g! ~5 k5 y2 y6 eResult = Findanswer(15) & i! p7 Z1 Y* W/ edocument.write ("The answer is " &Result). ], a' S/ t0 [2 ~2 c8 y$ ] Function Findanswer(x) $ o G. U) ?, t: ?, X2 `'This statement generates a run-time error. + O( h, O1 G+ [+ PFindanswer = x/0 ) c2 J4 ?) X- a! lEnd Function0 U: H0 V( T8 X# o$ ]4 P% ?/ O# [ </script>* M5 _' t3 Z) |4 Y7 q4 R 必须纠正导致运行时错误的错误,这样才能使脚本在运行时不被中断。 7 H1 Z0 \, h8 u+ B# F0 z: v逻辑错误 ! r$ x S/ U0 b0 {; Z9 \逻辑错误通常可能是潜在和难以检测的。如果有因键入错误或程序逻辑流程错误引起的逻辑错误,脚本可能会成功运行,但产生的结果却是错的。例如,一服务器端脚本计划对一个值列表排序,如果本应使用 "<" 符号比较数值,但却使用了" >" 符号,那么将返回不正确的排序结果。 0 s* D# {3 n4 ?; Z错误调试技术 9 g# T8 V0 t0 T) _$ f可以使用多种不同的调试技术来查找错误的根源并测试应用程序。( e& U. _$ M& G* t0 e 实时 (Just-In-Time, JIT) 调试3 o# g2 K, ~# [1 I4 `$ W1 G 当一个运行时错误中断了 ASP 脚本的执行时,Microsoft 脚本调试程序自动启动,显示 .asp 文件,将语句指针指向导致错误的行,并产生错误消息。这种调试方式称为实时 (JIT) 调试,计算机将暂停程序的执行。必须用编辑程序纠正这些错误,保存所做的修正,然后再运行脚本。 8 ]) c4 `; e9 ?7 \1 r; }2 n断点调试 ) q# {/ f" w, _3 p当一个错误发生并且很难找到错误的根源时,可使用预设断点的调试方法。断点将脚本暂停在特定一行。可以在脚本中有疑问处设置一个或多个不同的断点,然后使用调试器去改正脚本中设置的变量或属性的值。当您纠正这些错误之后,可以清除断点以便您的脚本能不间断地运行。; |4 N3 r7 x) l# [! y1 z6 l, p6 j 请用 Microsoft 脚本调试程序打开脚本,设置断点。然后用 Web 浏览器请求此脚本。当执行到脚本中含有断点的行时,计算机启动脚本调试程序,并且语句指针会指在设置了断点的行上。 5 g7 W8 W/ G$ p! zVBScript Stop 语句调试器0 |# \+ u5 ?/ s: w0 ?# T1 z 通过在服务器端脚本中有问题的部分前面插入 Stop 语句,您也可以将断点添加到用 VBScript 编写的服务器端脚本中。例如,下面的 ASP 脚本包含一个 Stop 语句,用来在显示结果之前暂停执行: . G/ P0 m. l2 X! t: O0 X' d6 W<% 7 H) X% N7 H' k6 [ dayvalue = 3* D2 ~! L; [: p: Y7 Y7 Q( B TheDay = WeekDayName(dayvalue)4 c2 h& E- |+ u4 [ y Stop 'set breakpoint here.: [6 E6 p2 V, \: } Response.Write("Today is " + TheDay) 2 H ~! W1 @( R/ m" U%>3 p' w$ x7 O2 D: @) o 当您在请求 Web 浏览器使用的先前的脚本时,调试程序启动并自动显示 .asp 文件,而且语句指针会指示 stop 语句的位置。一定要记住从交付使用的 .asp 文件中删除 Stop 语句。2 [9 B. m/ e0 L- v: h \5 \1 G 用 JScript Debugger 语句调试" h+ w$ n: D E9 z4 y: [2 ]# V 要将断点加到用 Microsoft? JScript 编写的服务器端脚本中,可在有疑问的行前插入 debugger 语句。例如,下面的脚本包含了 debugger 语句,每次脚本循环到一个新值时,就会中断执行并自动启动 Microsoft 脚本调试程序。 p; H' V. F! |2 D$ F O1 [<%@ Language="JScript" %> 4 I0 ?* G1 H# s6 V<% " T- W) H! I) A% C+ {for (var count = 1; count <= 10; count++) { R, h, B/ }$ h T% d/ jvar eventest = count%2; 1 E( R* `; @4 w2 n- ndebugger //Sets breakpoint 0 g4 O+ p J ?* c/ |2 V if (eventest == 0) { ! K$ E! z% Q" x# mresponse.write("Even value is " + count + "<br>") $ H0 E( \4 t' m3 \+ u4 L} 5 ~# [5 L, m9 q} ( g7 X* f: J, U! u# `/ u%>7 ?( ] ~5 m" |$ E, ^ 请记住从交付使用的 .asp 文件中删除 debugger 语句。. |4 H, @4 V. k) e d8 Y 注意 不要混淆 debugger 语句和 JScript break 语句。在程序执行期间,break 语句仅退出当前循环,并不激活 Microsoft 脚本调试器,也不暂停程序的执行。# @; S$ l! i3 ? e 脚本调试技巧 ; v# q9 j0 `, R4 t+ |5 G除脚本调试程序外,一套好的调试技巧也能减少花费在分析脚本错误根源上的大量时间。尽管大部分错误是由显而易见的根源导致的,但命令拼写错误或丢失变量、某种类型的逻辑和执行错误也可能因不太明显的根源所致。详细信息,请参阅 Microsoft 脚本调试程序文档的"调试技巧"部分。 # n1 z6 v: n0 ?) ^; A @






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5