正在加载图片...
china-pub.com 第章调试和误处理215 使用@ OLANGUAGE指令是避免产生上述错误的好方法。这样,如果把网页移到另一个缺 言不同的服务器上,也会得到预期的结 这里讲述的内容不可能覆盖所有可能遇到的语法错误,人们往往想知道为什么会出现错 误,而错误信息提示并不总是像人们希望的那样准确。理想的方式应该是ASP给我们提供 个简洁的错误显示页面,有对错误的全面精确的描述,甚至询问我们是否想自动处理错误。 事实上应用程序 Microsoft Script Debugger正试图为我们提供类似的功能,本章后面要对 其进行讨论,也要概括避免出现语法错误的一些要点。现在,我们继续研究经常在网页中出 现的第二类错误。 7.1.2语义或“运行期”错误 语法错误的发现和处理是令人烦恼的,但在编程中会遇到一些真正“令人兴奋”的另 类型的错误——,语义错误( semantic error)或称“运行期”错误( runtime error)。这类错误仅 当运行一个脚本代码或其他程序时才会发现。换句话说,完整有效的代码已经通过解释器或 编译器的解释或编译,在执行时产生了错误。术语“运行期错误”通常是指语义错误的结果, 也就是说这类错误存在于代码中的语义中,当代码运行时它们才变成可见的 这种区别来自于这种事实:程序编译器或解释器在处理程序代码之前必须建立一种内部 代码的描述,涉及多种结构开头和结尾的匹配,以便标明每种结构包含什么内容,然后分析 每个句子,以便知道如何执行这个句子。例如,如果在程序代码中有一个 IF Then Else.ndIf结构,解释器或编译器做的第一步工作就是分析哪些语句在“Then”的部分,哪 些在“Ese”部分。这一步的目的是,在对结构中的IF条件进行测试之后,可以决定该到哪个 分支去执行。 编译器(诸如在编程语言像 Visual basic和C艹+中见到的那种)和解释器(诸如用于像 Ⅴ SCript和 JScript那样的脚本语言的解释器)之间真正区别在于:编译器不试图运行程 序代码,而是在对源程序进行两次预处理后,形成二进制指令或符号代码,并形成 个exe文件或d文件。解释器不创建含有代码的文件,而是在运行时逐行执行。 使运行停止的错误 如果程序中含有一个语义错误,通常在运行时可得到提示。如果幸运的话,当错误发生 程序会停止,这样可以容易地找出错误所在。例如,下面这段程序定义了一个有六个元 素的数组 Dim arrValues(5) 'to hold six elements, indexed from0 to 5 arrValues(6)="Whoops, got 如果试图读或设置下标为6的元素值,可以得到一个运行期错误,如图7-7所示 Microsoft VBScript runtime(0x800A000 Subscript out of range: 'Inumber: 6] /test/test. asp, line 3 图7-7程序执行结果6始终使用@ L A N G U A G E指令是避免产生上述错误的好方法。这样,如果把网页移到另一个缺 省语言不同的服务器上,也会得到预期的结果。 这里讲述的内容不可能覆盖所有可能遇到的语法错误,人们往往想知道为什么会出现错 误,而错误信息提示并不总是像人们希望的那样准确。理想的方式应该是 A S P给我们提供一 个简洁的错误显示页面,有对错误的全面精确的描述,甚至询问我们是否想自动处理错误。 事实上应用程序Microsoft Script Debugger正试图为我们提供类似的功能,本章后面要对 其进行讨论,也要概括避免出现语法错误的一些要点。现在,我们继续研究经常在网页中出 现的第二类错误。 7.1.2 语义或“运行期”错误 语法错误的发现和处理是令人烦恼的,但在编程中会遇到一些真正“令人兴奋”的另一 类型的错误—,语义错误(semantic error)或称“运行期”错误 (runtime error)。这类错误仅 当运行一个脚本代码或其他程序时才会发现。换句话说,完整有效的代码已经通过解释器或 编译器的解释或编译,在执行时产生了错误。术语“运行期错误”通常是指语义错误的结果, 也就是说这类错误存在于代码中的语义中,当代码运行时它们才变成可见的。 这种区别来自于这种事实:程序编译器或解释器在处理程序代码之前必须建立一种内部 代码的描述,涉及多种结构开头和结尾的匹配,以便标明每种结构包含什么内容,然后分析 每个句子,以便知道如何执行这个句子。例如,如果在程序代码中有一个 IF Then ... Else...End If结构,解释器或编译器做的第一步工作就是分析哪些语句在“ T h e n”的部分,哪 些在“E l s e”部分。这一步的目的是 ,在对结构中的I F条件进行测试之后,可以决定该到哪个 分支去执行。 编译器(诸如在编程语言像Visual Basic和C + +中见到的那种)和解释器(诸如用于像 V B S c r i p t和J S c r i p t那样的脚本语言的解释器)之间真正区别在于:编译器不试图运行程 序代码,而是在对源程序进行两次预处理后,形成二进制指令或符号代码,并形成一 个. e x e文件或. d l l文件。解释器不创建含有代码的文件,而是在运行时逐行执行。 1. 使运行停止的错误 如果程序中含有一个语义错误,通常在运行时可得到提示。如果幸运的话,当错误发生 时,程序会停止,这样可以容易地找出错误所在。例如,下面这段程序定义了一个有六个元 素的数组。 如果试图读或设置下标为6的元素值,可以得到一个运行期错误,如图 7 - 7所示。 图7-7 程序执行结果6 第7章 调试和错误处理计计2 1 5 下载
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有