ASP代码分析工具使用指南

在进行大型ASP项目变更或使用之前ASP项目的包含文件时,确保不部署不必要的代码变得尤为重要。本文将介绍如何使用ASP代码分析工具来识别项目或文件夹中未使用的代码元素,如未使用的常量、全局变量、函数、子程序和局部变量。

虽然本文不会详细描述代码的工作原理,因为主要议题是如何去除未使用的元素,并且代码实际上是用C#编写的,但会让了解工具的操作方式及其局限性。

使用分析器

ASP代码分析器的使用非常简单。首先下载可执行文件,解压缩并运行ASPCodeAnalyzer.exe。接下来,可以浏览包含ASP项目的目录。点击“Go”按钮,分析器将开始工作。需要强调的是,分析器不会更改文件,它只会指出代码中存在未使用代码元素的部分。

如果机器上安装了UltraEdit32,并且双击发现列表,该工具将自动启动UltraEdit32并打开相应代码行的文件。如果使用其他编辑器,可以使用“文件/选项”对话框来定义编辑器及打开指定文件的参数。

代码必须是语法正确的。否则,分析器将无法正常工作。

分析器的工作原理

第一阶段:首先,分析器列出给定目录及其所有子目录中的.asp.inc文件,并将它们放入队列。然后,队列中的所有文件被读取。如果分析器遇到include语句,它会将引用的文件添加到队列中(如果尚未在队列中)。如果包含的文件不存在于硬盘上,分析器会在窗口底部的错误列表中写入一条消息。

在读取文件时,它会剥离所有的HTML代码、所有注释(包括rem注释)以及所有被双引号包围的文本。解析器足够智能,能够将两个连续的双引号视为一个单独的双引号。

现在,原始文件中只剩下代码,分析器创建一个内部的“代码树”:

  • 常量
  • 全局变量
  • 全局代码
  • 子程序/函数
  • 局部变量
  • 代码
  • 方法
  • 局部变量
  • 代码

分析器不会测试类在代码中的使用情况。它也无法测试类的具体成员和方法是否被使用。但是,它会检查局部变量是否被使用。

在构建代码树时,会测试子程序、函数和方法的局部变量的使用情况。这是通过测试变量名称是否在代码块中使用来完成的。

第二阶段:现在到了棘手的部分:寻找未使用的全局变量和子程序/函数。首先,所有元素都被认为是未使用的。然后,所有文件再次以组的形式进行处理。一个组由一个文件加上所有引用的文件组成。

检查当前文件组的所有元素。如果在文件组的代码中任何地方使用了元素的名称,那么该元素就被认为是已使用的。通过检查文件组而不是单独的文件,可以在所有可能的上下文中测试包含文件。

匹配元素与代码

假设分析器想要知道子程序WriteTd是否在代码块中使用,那么以下语句将被匹配:

  • VBScript call WriteTd( someVar)
  • VBScript call WriteTd ( someVar)

以下语句不匹配,因为子程序的名称实际上是整个标识符的一部分:

  • VBScript call WriteTd2( someVar)
  • VBScript call MyWriteTd( someVar)

局限性

请注意:由于其启发式特性,算法可能无法找到代码中的所有未使用元素。但积极的一面是,它的所有发现确实应该是未使用的元素。

分析器无法检测到以下情况:

VBScript function test dim unusedVar unusedVar = 12 end function

尽管变量unusedVar在技术上是无用的,因为它没有在任何地方用于处理,但分析器不会通知。一般来说,分析器只会指出那些可以删除而不会破坏代码的代码块。

如果使用局部变量来遮蔽全局变量,全局变量总是被认为是已使用的。

VBScript dim unusedGlobal function test dim unusedGlobal ' Shadows the global variable unusedGlobal = 12 Response.Write( unusedGlobal) end function

变量不应在多行中定义。在以下代码中:

VBScript dim a,b,c, _ d,e,f
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485