检测C中未使用的函数



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

解决方案可以是:

  • 一个工具,通过我的。c文件,分析他们
  • 一个实用程序,通过我编译的ELF文件,有符号,静态分析它
  • 一种对gcc中未使用的函数发出警告的方法(对于全局函数- unused-functions不会这样做)

解决方案不能是:

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

谢谢

如果你需要一些精确的、自动化的或精致的东西,你需要你的编译器和构建系统合作,以某种方式为你做这件事。

如果您不需要精确的结果或特别自动化或抛光的东西,那么这里有一个非常粗略的近似:它将找到在所有。c文件中只出现一次的每个单词。

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

当然,这可能会以无数种方式失败:预处理器技巧,重复函数名的注释,与注释中使用的常用单词命名的函数等。

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

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

相关内容

  • 没有找到相关文章

最新更新