代码之家  ›  专栏  ›  技术社区  ›  Kenneth Cochran

在Delphi中查找未使用的(也称为“死的”)代码

  •  12
  • Kenneth Cochran  · 技术社区  · 15 年前

    是否有工具可以确定是否使用了函数/过程/方法/整个类?

    我见过一些工具可以帮助知识渊博的开发人员找到未使用的代码片段(大多数是针对除Delphi之外的其他语言),但大多数都具有陡峭的学习曲线和/或需要大量的挖掘来确定是否使用了代码片段。

    Delphi的智能链接器据称这样做是为了减少最终可执行文件的大小。不幸的是,智能链接器上提供的信息很少,这并不意味着可以检索从赫德精选的内容。

    诚然,即使有可能发现智能链接器正在删除的内容,也可能会非常保守地进行剔除。

    8 回复  |  直到 14 年前
        1
  •  5
  •   RobertFrank Picarus    15 年前

    虽然笨拙而且不是全局的,但是您可以检查边缘点的源代码,如下所示。这些行可以设置断点,因为代码没有被消除死码。

    我相信这是在程序层面上发生的。我不知道如何在一个较不粗糙的层次上确定这一点。

    alt text

        2
  •  4
  •   Community Mohan Dere    9 年前

    这个线程讨论了删除未使用的单元,并讨论了诸如i卡洛斯帕斯卡分析器之类的工具。这个工具可以满足你所有的需要。 How to "automatically" remove unused units from uses clause?

        3
  •  2
  •   Darian Miller    15 年前

    您还可以检查最常用的商业探查器/覆盖工具,aqtime,来自 http://www.automatedqa.com

    以下是功能视频: http://www.automatedqa.com/products/aqtime/screencasts/coverage-profiling/

        4
  •  2
  •   mjn anonym    15 年前

    您可以使用 Code Coverage 用于查找未使用代码的工具。只需运行应用程序并手动执行所有部分。代码覆盖率报告将显示未接触的部件。(在单元测试上运行工具没有帮助,因为未使用的代码仍然可以进行单元测试)。

    Delphi提供免费(开源)代码覆盖工具 here . 运行之后,检查报告中是否有红线,这些是尚未到达的线。

    Delphi代码覆盖范围是一个简单的代码 Delphi的覆盖工具 代码覆盖率报告基于 详细地图文件。

    每个单元都有一个 Unit.html及其摘要 覆盖范围,然后是来源 已标记。绿线覆盖。 红线不是覆盖线。这个 其他行没有生成代码 为了它。还有一个 codecoverge_summary.html文件 总结覆盖范围并有链接 到生成的单元报告。

    也许作者可以在将来的版本中添加“搜索死代码”功能。

        5
  •  0
  •   Darian Miller    15 年前

    在处签出工具 http://www.peganza.com/ 帮助完成一些任务。

    Icarus是免费软件,它分析您的“uses”条款,允许您删除未使用的引用。

    PascalAnalyzer是完整的版本,它包括i卡洛斯功能和大量其他工具。

        6
  •  0
  •   Mohammed Nasman    15 年前

    也许吧 CodeHealer 可以帮助您处理未使用的代码

    codehealer执行深入的 分析源代码,寻找 以下方面的问题:

    审计: 质量控制规则,如未使用或无法访问的代码、使用 Delphi指令名称和关键字 标识符、隐藏其他标识符 在更高的范围内使用相同的名称, 还有更多。 检查: 潜在错误,如未初始化或未引用 标识,危险类型铸造, 自动类型转换,未定义 函数返回值,未使用 赋值等等。 韵律学: 量化代码属性,如循环 复杂性,对象之间的耦合 (数据抽象耦合),注释 比率、类数、行数 代码等等。

        7
  •  0
  •   Nick Ring    15 年前

    对于单位,使用 Pascal Analyzer . 您可能需要多次使用它。

    对于在类工厂(以及类似工厂)中注册的对象/类,您需要手动进行双重检查,因为它们将在中完全编译。原因是编译器不知道您是否真的使用它们。

    对于方法,您需要检查蓝色点。不太实际,所以还有另一种方法(从我调查同一个话题时被告知的情况来看)。您需要在启用详细映射文件的情况下进行完整的生成。完成后,您需要比较源代码以查看映射文件中是否有条目。如果不是,那么代码就不会编译在死代码中(可能是因为如果它是组件,那么可能是因为您没有使用该功能)。

        8
  •  0
  •   Marco van de Voort    15 年前

    在过去,我使用“生成汇编程序”功能使用免费的pascal编译了源代码,然后制作了一些简单的对源代码进行操作的过滤程序。(对于该位,了解使用链接器“部分”粒度完成智能链接很有用)

    它有时会让您了解为什么某些事物没有智能链接(例如,因为在某些表中有一个引用 可以 在初始化时被某个对象访问)

    当然,delphi不是fpc,但是当您有提示要查找什么时,需要在delphi编译后查看边缘中的点,以查看它是否是智能链接的。同样,如果您想知道为什么某些代码被智能链接出来,那么分析用fpc编译到汇编程序中的一个小示例程序可以使原因显而易见。(例如,您可以找到引用它的RTTI表)

    fpc路由允许系统路由搜索此类测试的候选。

    推荐文章