【问题标题】:Identifying Unused Functions in C/C++ [duplicate]识别 C/C++ 中未使用的函数 [重复]
【发布时间】:2012-05-24 07:14:56
【问题描述】:

可能重复:
Finding “dead code” in a large C++ legacy application

我的项目有很多 C 源文件,每个文件都有很多全局函数。其中许多根本不再被任何调用者引用。有没有一种简单的方法可以确定哪些函数根本没有被任何人引用?

VC生成的地图文件好像很有用。但我不确定函数名称是如何/何时在地图文件中列出的。

【问题讨论】:

  • 手动删除并重新编译可疑函数的代码。
  • 其实,我有兴趣了解VC链接器生成的映射文件如何用于此目的。 (因为它是免费提供的)

标签: c++ c function dead-code


【解决方案1】:

您可以使用CCCC(免费、开源),它会为您提供有关您的程序的大量指标。另一种选择是Coverity(不是免费的)。

此问题可能与此问题重复:Dead code detection in legacy C/C++ project

【讨论】:

    【解决方案2】:

    我认为地图文件没有任何用处。如果和其他一样 我见过的地图文件,它不会指示符号在哪里(如果有的话) 使用——仅在它被定义的地方。你可以做的是运行dumpbin 在你的目标文件上:dumpbin /relocations,例如,将在 事实显示符号的每次使用,其地址可能需要 重定位(实际上是静态的函数和变量) 寿命)。然后,您可以在输出上使用常用工具来确定 您感兴趣的功能是否存在。 (作为某人 谁主要在 Unix 上工作,我已经安装了 CygWin 并且会使用 grep。我不熟悉不同的本地等价物 Windows下的Unix工具。)

    这将相当简单(使用 Python 或一些类似的脚本 语言)编写一个小脚本来解析 dumpbin /symbols 获取每个目标文件的名称 您定义的所有函数,然后解析dumpbin /relocations 的输出,为您提供您使用的函数列表,最后 两者的差异。 (微软似乎已经走出了他们的 使dumpbin 的输出难以使用的方法,但仍然不是 这么难;您只需要知道要忽略哪些行。)

    【讨论】:

    • 使用编译器和链接器选项为每个函数和全局变量创建单独的部分并丢弃未使用的代码将生成一个仅包含引用符号的映射文件。然后,您可以删除所有未提及的公共函数和它们引用的静态函数,大多数编译器无论如何都会抱怨。
    猜你喜欢
    • 2013-01-12
    • 2017-04-08
    • 1970-01-01
    • 2013-07-02
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    相关资源
    最近更新 更多