可能重复:
在一个大型C寻找“死码” ++遗留应用程序
我的项目有大量的C源文件每一个批次的全局函数。 许多这些不再受任何调用引用的。 有一个简单的方法来识别这些功能不被人引用的呢?
通过VC生成的地图文件似乎是有用的。 但我不知道究竟是如何/当函数名称在地图文件中列出。
可能重复:
在一个大型C寻找“死码” ++遗留应用程序
我的项目有大量的C源文件每一个批次的全局函数。 许多这些不再受任何调用引用的。 有一个简单的方法来识别这些功能不被人引用的呢?
通过VC生成的地图文件似乎是有用的。 但我不知道究竟是如何/当函数名称在地图文件中列出。
您可以使用CCCC (免费,开源的),它给你很多关于你的计划指标。 另一种选择是Coverity的 (不是免费的)。
这个问题可能是这其中的一个副本: 死亡代码检测在传统的C / C ++项目
我不认为地图文件会有任何用处。 如果它就像我见过的其他地图文件,它不会指明(如果任何地方)的象征使用,只有在它被定义。 你可以做的运行dumpbin
在你的目标文件: dumpbin /relocations
,例如,实际上将显示每一个使用符号与可能需要搬迁的地址(实际地说,函数和变量与静态的寿命)。 然后,可以使用在输出你平常的工具,以确定您感兴趣的功能是否存在与否。 (正如有人谁大多工作在Unix上,我已经安装了Cygwin和将使用grep
,我不熟悉的本地等价Windows下不同的Unix工具。)
这将是相当简单的(使用Python,或一些类似的脚本语言)编写一个小脚本会解析输出dumpbin /symbols
为每个目标文件,让所有的你所定义的函数的名称,然后解析输出dumpbin /relocations
给你的,你使用的功能列表,最后做两者的差异。 (微软似乎已经以他们的方式,使输出dumpbin
很难使用,但它仍然不是那么难。你只需要知道要忽略的行)
这样做的一个straightfoward但费力的方式是简单地包裹函数声明和与预处理指令任何可疑函数的定义:
#if 0
void old_func();
#endif
...
#if 0
void old_func()
{
}
#endif
或者,如果你想有更多的控制,你可以用自己的实际宏,以便替换0 #if 0
变#ifdef NO_OLD_FUNCTIONS
-这样更容易找到并带他们出去permenantly在后一阶段,一旦你高兴他们“不习惯。
当然,你需要完全编译和链接代码,并建立在它的任何其他代码。