ASP 代码分析器






4.77/5 (14投票s)
2005年7月16日
4分钟阅读

158761

3634
一个简单的工具,用于查找 ASP 代码中未使用的子程序、函数和变量。
引言
该工具的目的是检查 ASP 项目/文件夹中未使用的代码元素。这些元素包括未使用的常量、全局变量、函数、子程序和局部变量。如果您对项目进行重大更改,或使用以前 ASP 项目的包含文件,并且想确保不部署不必要的代码,这将非常有用。
本文不会详细描述代码的工作原理,因为主要主题是如何摆脱未使用的元素,而代码实际上是用 C# 编写的。但是,它将让您了解该工具的运行方式及其局限性。
使用分析器
ASP 代码分析器非常易于使用。首先下载可执行文件,解压缩并运行 ASPCodeAnalyzer.exe。接下来,您可以浏览包含 ASP 项目的目录。点击“Go”按钮,分析器将开始工作。我想强调的是,分析器 **不会** 更改您的文件。它只会指向代码中存在未使用的代码元素的那些部分。
如果您在计算机上安装了 UltraEdit32,并且双击查找列表,该工具将自动启动 UltraEdit32 并打开相应代码行中的文件。如果您使用其他编辑器,可以使用“文件/选项”对话框来定义您的编辑器以及用于在给定行上打开指定文件的参数。
您的代码必须在语法上是正确的。否则,分析器将无法正常工作。
分析器的工作原理
第一遍
- 首先,分析器列出给定目录及其所有子目录中的所有 .asp 和 .inc 文件,并将它们放入一个队列。
- 现在读取队列中的所有文件。如果分析器遇到
include
语句,它会将引用的文件添加到队列(如果尚未添加)。如果包含的文件在硬盘上不存在,分析器会在窗口底部的错误列表中写入一条消息。 - 在读取文件的同时,它会剥离所有 HTML 代码、所有注释(包括
rem
注释)以及所有被双引号包围的文本。解析器足够智能,可以将两个连续的双引号视为一个单独的双引号。 - 现在,当只剩下原始文件的代码时,分析器会创建一个内部“代码树”
- constants
- 全局变量
- 全局代码
- 子程序/函数
- 局部变量
- code
- 类
- 方法
- 局部变量
- code
- 方法
分析器不测试代码中是否使用了类。它也无法测试类中的特定成员和方法是否被使用。但是,它会检查局部变量是否被使用。
- 在构建代码树时,会测试子程序、函数和方法的局部变量的用法。这是通过测试变量名是否在代码块中使用来完成的。
第二遍
现在进入棘手的部分:查找未使用的全局变量和子程序/函数。
- 首先,所有元素都被视为未使用。
- 现在,所有文件将再次分组处理。一个组包含一个文件及其所有引用的文件。
- 检查当前文件组的所有元素。如果元素名称在文件组的代码中的任何位置被使用,则该元素被视为已使用。
通过检查文件组而不是单个文件,可以测试包含文件在所有可能的上下文中的用法。
将元素与代码进行匹配
假设分析器想知道子程序 WriteTd
在代码块中是否被使用,那么以下语句会匹配
call WriteTd( someVar)
call WriteTd ( someVar)
以下语句不匹配,因为子程序的名称实际上只是整个标识符的一部分
call WriteTd2( someVar)
call MyWriteTd( someVar)
限制
请注意:由于其启发式性质,该算法可能无法找到代码中所有未使用的元素。从积极的方面来看,它找到的所有内容都应该是真正未使用的元素。
分析器无法检测到以下情况
function test
dim unusedVar
unusedVar = 12
end function
尽管变量 unusedVar
在技术上是无用的,因为它没有在任何地方用于处理,但分析器不会通知您。总的来说,分析器只会指出那些可以删除而不会破坏代码的代码块。
此外,如果您使用的局部变量会覆盖全局变量,则全局变量始终被视为已使用。
dim unusedGlobal
function test
dim unusedGlobal ' Shadows the global variable
unusedGlobal = 12
Response.Write( unusedGlobal)
end function
变量不应在多行中定义。在以下代码中
dim a,b,c, _
d,e,f
分析器只会将 a
、b
和 c
识别为变量。
结论
尽管存在这些缺点,ASP 代码分析器仍应让您对代码的整洁程度有一个很好的印象。
历史
- 2005 年 7 月 17 日 - 初始发布。
- 2006 年 7 月 23 日 - 调整代码以纠正 biggun 的误报。
- 2006 年 12 月 6 日 - 添加了对
//
注释的处理。