是否有任何工具可以确定是否使用了函数/过程/方法/整个类?
我见过的工具可以帮助知识渊博的开发人员追踪未使用的代码片段(大多数用于Delphi以外的语言),但大多数都有陡峭的学习曲线和/或需要大量挖掘才能确定是否使用了代码片段或不。
Delphi的智能链接器据称可以减少最终可执行文件的大小。不幸的是,在智能链接器上给出的信息很少并不表示检索从hurd中剔除的内容的方法。
不可否认,即使有可能找出智能链接器正在消除的内容,它的剔除也可能非常保守。
答案 0 :(得分:5)
虽然笨拙而不是全局,但您可以检查边距中点的源代码,如下所示。这些是可以设置断点的行,因为代码没有消除死码。
我相信,在程序层面会发生这种情况。我不知道如何在较低的水平上确定这一点。
答案 1 :(得分:4)
该主题讨论了删除未使用的单元,并讨论了像Icarus Pascal Analyzer这样的工具。该工具将满足您的所有需求。 How to "automatically" remove unused units from uses clause?
答案 2 :(得分:2)
您可以使用Code Coverage工具查找未使用的代码。只需运行应用程序并手动执行所有部件。代码覆盖率报告将显示未触及的部分。 (在单元测试上运行该工具没有用,因为未使用的代码仍然可以进行单元测试。)
Delphi的免费(开源)代码覆盖率工具here。运行后,检查报告中的红线,这些是尚未到达的行。
Delphi Code Coverage是一个简单的代码 创建的Delphi覆盖工具 代码覆盖率报告基于 详细的MAP文件。
每个单位都有一个 unit.html的摘要 覆盖范围,其次是来源 标记了。绿线被覆盖。 红线没有被覆盖的线条。该 其他行没有生成代码 为了它。还有一个 CodeCoverage_summary.html文件 总结了覆盖范围并有链接 到生成的单位报告。
也许作者可以在将来的版本中添加“搜索死代码”功能。
答案 3 :(得分:2)
您还可以查看最常用的商业分析器/覆盖工具,来自http://www.automatedqa.com的AQTime
以下是有关功能的视频:http://www.automatedqa.com/products/aqtime/screencasts/coverage-profiling/
答案 4 :(得分:0)
查看http://www.peganza.com/处的工具,以帮助完成部分任务。
Icarus是免费软件,它会分析您的“使用”条款,以便您删除未使用的引用。
Pascal Analyzer是完整版,包括Icarus功能和大量其他工具。
答案 5 :(得分:0)
也许CodeHealer可以帮助您处理未使用的代码
CodeHealer深入执行 分析源代码,寻找 以下方面的问题:
审核:质量控制规则,例如未使用或无法访问的代码,使用 Delphi指令名称和关键字为 标识符,隐藏其他标识符 在更高的范围内同名 和更多。 检查:潜在错误,例如未初始化或未引用 标识符,危险类型铸件, 自动类型转换,未定义 函数返回值,未使用 分配的值等等。 指标:量化代码属性,例如圈数 复杂性,对象之间的耦合 (数据抽象耦合),评论 比率,班级数,线数 代码等等。
答案 6 :(得分:0)
对于单位,请使用Pascal Analyzer。您可能需要多次使用它。
对于在类工厂中注册的对象/类(等),您需要手动进行双重检查,因为它们将被完全编译。原因是编译器不知道您是否实际是否使用它们。
对于方法,您需要检查蓝点。不太实际,所以还有另一种方式(从我在调查同一主题时被告知)。您需要在启用详细地图文件的情况下执行完整构建。完成后,您需要比较源以查看映射文件中是否有条目。如果没有,那么代码不会被编译 - 可能是死代码(可能因为如果它是组件,那么可能是你不使用该功能)。
答案 7 :(得分:0)
过去我使用“生成汇编程序”功能编译Free Pascal源代码,然后制作一些在源代码上运行的简单过滤程序。 (对于这一位,知道使用链接器“section”粒度完成smartlinking很有用)
它有时会为您提供有关某些内容未被智能链接的见解(例如,因为某些表中存在可能在初始化中被某些内容访问)
当然Delphi不是FPC,但是当您提示要查找的内容时,需要在Delphi编译后查看边距中的点以查看它是否为smartlinked。同样,如果你想知道为什么某些代码已经(没有)被智能链接,那么分析一个用FPC编译成汇编程序的小例子程序就可以明白这个原因。 (例如,您找到带有对它的引用的RTTI表)
FPC路线允许系统路线搜索候选人进行此类测试。