14

尽管它过时而痛苦 - 我在一家继续积极使用 VB6 进行大型项目的公司工作。事实上,18 个月前我们遇到了 32k 标识符的限制。

不愿意放弃大型代码库并在 .NET 中重写所有内容,我们将应用程序分解为一个主可执行文件和几个支持 DLL 文件。本周我们再次遇到了 32k 的限制。

我们遇到的问题是,我们找不到任何工具可以告诉我们源使用了多少唯一标识符。我们没有准确的方法来衡量我们的努力如何减少标识符的数量,或者我们在达到极限之前有多接近极限。

有谁知道一个工具可以扫描项目的源代码并返回一些准确的指标和统计数据?

4

6 回答 6

2

好的。Project Metrics Viewer 是 Aivosto 的 Project Analyzer 工具的一部分,它将完全满足您的需求。我已经包含了一个屏幕截图以及指向包含变量数量等的指标列表的链接。

指标列表

替代文字
(来源:aivosto.com

于 2009-04-17T17:04:54.210 回答
1

AxTools 的 CodeSmart 非常好。(来源:axtools.com
替代文字

于 2009-04-17T13:15:00.660 回答
1

我工作的公司也有一个遇到标识符限制的大型 VB6 项目。我开发了一种方法来准确计算剩余标识符的数量,这已被纳入我们这个项目的构建过程中。

在尝试了几个工具都没有成功之后,我终于意识到 VB6 IDE 本身确切地知道它还剩下多少标识符。事实上,当您添加一个超过其限制的变量时,VB6 IDE 会引发“内存不足”错误。

利用这个事实,我编写了一个 VB6 Add-In 项目,它首先在 IDE 中编译当前加载的项目,然后将唯一命名的变量添加到项目中,直到它抛出错误。当出现错误时,它会将在错误之前添加的标识符的数量记录为剩余的标识符数量。

此编号存储在我们的自动构建过程已知位置的文件中,然后读取此编号并将其报告给开发团队。当它低于我们认为合适的值时,我们会安排一些重构时间并将更多代码从该项目移出到 DLL 项目中。几年来,我们一直在生产中使用它,并且已被证明是一个可靠的过程。

要直接回答这个问题,我知道使用加载项是准确测量剩余标识符数量的唯一方法。虽然我无法分享我们项目正在使用的插件代码,但我可以说涉及的代码并不多,而且开发时间也不长。

Microsoft 有一个关于如何创建加载项的不错的指南,可以帮助您入门: https: //support.microsoft.com/en-us/kb/189468

以下是特定于计数标识符的一些重要细节:

  • 在当前加载的项目被编译之前,VB6 IDE 在标识符不足时不会始终抛出错误。我们的插件在添加标识符之前以编程方式执行此操作以确保准确计数​​。如果无法编译项目,则无法获得准确的计数。
  • 有 32,500 个标识符可用于新的空 VB6 项目。
  • 只计算唯一标识符名称。在两个不同的例程中具有相同名称的两个局部变量仅算作一个标识符。
于 2015-09-30T17:11:16.760 回答
0

您可以从从 VB6 代码中提取标识符的工具中获得此信息。然后您所要做的就是对列表进行排序、消除重复项并测量列表大小。我们有一个源代码搜索引擎,它将源代码分解为语言标记(“lexes”),其中一些标记正是那些标识符。那将包含您想要的数据。

但也许还有另一种方法可以解决您的问题:找出哪些变量名很少出现,并将它们替换为一组标准名称(例如,“temp”)。所以你真正想要的是计算每个变量名的数量,这样你就可以对“少量引用”进行排序。相同的词法分析器数据可以提供此信息。

然后,您所需要的只是一个工具,可以将低出现率的标识符重命名为标准集中的名称。我们提供了混淆器,可以用另一个名称替换一个名称,这可能会做到这一点。

[2014 年 10 月更新]。刚刚和有这个问题的人进行了长时间的交谈。事实证明,有一个非常概念性的答案可以作为工具的基础,称为寄存器着色,它将固定数量的寄存器分配给任意数量的操作数。这是通过计算操作数上的“干涉图”来实现的;并且两个不“干扰”的操作数可以分配给同一个寄存器。如果干扰图还不够糟糕,可以使用它将 2^16 个可用变量名称分配给任意数量的标识符。我的猜测是它不是。YMMV,仍然需要有人构建这样的工具,可能需要 VB6 解析器和机器来计算这样的图。[查看我的简历]。

于 2009-08-12T04:10:07.320 回答
0

作弊 - 创建一个未使用的类,其中包含#### 唯一变量。使用 Excel 或其他工具生成按字母顺序排列的唯一变量名称。当您达到限制时从项目中删除该类,或注释掉 100 个唯一变量的块。

无论如何,我宁愿依靠编译器(它定义了多少变量太多)而不是一些第 3 方工具。

(哦,粗鲁,抱歉死灵 - 没有注意到日期)

于 2010-03-16T19:41:01.637 回答
-1

Compuware 的 DevPartner似乎有这种代码分析。不知道当前版本是否还支持Visual Basic 6.0。(但至少有 14 天的试用期)

于 2009-04-17T13:58:30.773 回答