检测C中未使用的功能

时间:2014-03-24 22:11:34

标签: c gcc code-analysis utility dead-code

我正在寻找一种方法来检查我的C项目(编译为ELF)是否具有未使用的功能,并找到它们。 这是声明的函数,但在我的代码中没有被调用。

解决方案可以是以下之一:

  • 通过我的.c文件分析它们的实用程序
  • 一个实用程序,它通过我编译的ELF文件,有符号,静态分析
  • 警告gcc中未使用的函数的方法(和-Wunused函数不会对全局函数执行此操作)

解决方案不能是以下之一:

  • 在编译时删除未使用的函数,而不知道删除了哪些函数
  • 在运行时分析ELF文件,因为并非每个函数都会调用每个函数,例如gprof(有些函数需要几天才会被调用,但在代码流中你可以看到它们是最终叫了)
  • 在函数内发现死代码的实用程序(即函数返回后的代码),而不是未使用的函数

谢谢

2 个答案:

答案 0 :(得分:1)

最简单的方法是处理项目中的目标文件,而不像链接器那样。除了注意未引用的符号之外,它不需要做任何事情,因此这比编写链接器要容易得多。

名为lorder的Unix / Linux / Cygwin实用程序可以满足您的需要。

答案 1 :(得分:0)

如果你需要精确,自动或抛光的东西,你需要你的编译器和构建系统来组合并以某种方式为你做。

如果你不需要确切的结果或特别自动或抛光的东西,那么这里有一个非常粗略的近似:它会发现你的所有.c文件中只出现一次的每个单词。

find . -name \*.c -exec cat {} \; \
   | tr -s '[[:space:];:,?!.|()-"<>=]' '\n' \
   | sort \
   | uniq -u

这当然可以通过一百万种方式失败:预处理器技巧,重复函数名称的注释,与注释中使用的常用单词相同的函数等。