检测C中未使用的功能

spe*_*ler 5 c gcc code-analysis utility dead-code

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

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

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

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

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

谢谢

Sør*_*ois 1

如果您需要精确、自动化或完善的东西,则需要编译器和构建系统以某种方式合作并为您完成。

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

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

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