由于过时和痛苦 - 我在一家继续积极使用VB6进行大型项目的公司工作。实际上,18个月前我们遇到了32k标识符限制。
不愿意放弃大型代码库并重写.NET中的所有内容,我们将应用程序分解为主可执行文件和几个支持DLL文件。本周我们又遇到了32k的限制。
我们遇到的问题是,我们找不到的任何工具都会告诉我们我们的源使用了多少个唯一标识符。我们没有准确的方法来衡量我们的努力如何减少标识符的数量或我们达到限制之前的接近程度。
是否有人知道会扫描项目来源的工具并返回一些准确的指标和统计数据?
答案 0 :(得分:2)
行。项目指标查看器是Aivosto项目分析器工具的一部分,它将完全按照您的要求进行操作。我已经包含了截图以及指标列表的链接,其中包括变量数量等。
(来源:aivosto.com)
答案 1 :(得分:1)
AxTools的CodeSmart非常好
(来源:axtools.com)
答案 2 :(得分:1)
我工作的公司也有一个遇到标识符限制的大型VB6项目。我开发了一种方法来准确计算剩余标识符的数量,这已经包含在我们的项目构建过程中。
在尝试了几个没有成功的工具之后,我终于意识到VB6 IDE本身确切地知道它剩下多少个标识符。实际上,当您将一个变量添加到其限制之外时,VB6 IDE会抛出“内存不足”错误。
利用这一事实,我编写了一个VB6加载项项目,该项目首先在IDE中编译当前加载的项目,然后将唯一命名的变量添加到项目中,直到它抛出错误。当引发错误时,它会将错误之前添加的标识符数记录为剩余的标识符数。
此编号存储在文件中,位于我们的自动构建过程已知的位置,然后读取此编号并将其报告给开发团队。当它低于我们感到满意的值时,我们会安排一些重构时间并将更多代码从此项目中移出到DLL项目中。我们已经在生产中使用它已经有好几年了,并且已被证明是一个可靠的过程。
要直接回答这个问题,使用加载项是我知道准确衡量剩余标识符数量的唯一方法。虽然我无法共享我们项目正在使用的插件代码,但我可以说代码涉及的代码不多,而且开发时间不长。
Microsoft有一个关于如何创建加载项的合适指南,它可以帮助您入门: https://support.microsoft.com/en-us/kb/189468
以下是计算标识符的一些重要细节:
答案 3 :(得分:0)
您可以从一个从VB6代码中提取标识符的工具中获取此信息。然后,您所要做的就是对列表进行排序,消除重复项并测量列表大小。我们有一个source code search engine将源代码分解为语言标记(“lexes”),其中一些标记正是那些标识符。这将包含您想要的数据。
但也许还有另一种解决问题的方法:找出哪些变量名很少出现,并用一组标准名称(例如“temp”)替换它们。所以你真正想要的是每个变量名称的数量,这样你就可以对“少量引用”进行排序。相同的词法分析器数据可以提供此信息。
然后,您只需要一个工具,将低位置标识符重命名为标准集中的某些内容。我们提供的混淆器可以替换另一个可能会这样做的名称。
[2014年10月更新]。和这个问题的某个人进行了长时间的交谈。事实证明,有一个基于工具的非常概念性的答案,它被称为register coloring,它将固定数量的寄存器分配给任意数量的操作数。这通过计算操作数上的“干涉图”来工作;并且可以为两个不“干扰”的操作数分配相同的寄存器。如果干扰图不够糟糕,可以使用它将2 ^ 16个可用变量名称分配给任意数量的标识符。我的猜测是不是。 YMMV,还有人还需要构建这样一个工具,需要一个VB6解析器和机器来计算这样的图形。 [看看我的生物]。
答案 4 :(得分:0)
作弊 - 使用####唯一变量创建一个未使用的类。使用Excel或其他东西生成按字母顺序排列的唯一变量名称。当您达到限制时从项目中删除该类,或注释掉100个唯一变量的块..
我宁愿依靠编译器(定义多少变量太多)而不是某些第三方工具。
(哦,crud,对不起necro - 没有注意到日期)
答案 5 :(得分:-1)
似乎Compuware's DevPartner有这种代码分析。我不知道当前版本是否仍支持Visual Basic 6.0。 (但至少有14天的试用期)