在C中列出函数调用者的工具?

时间:2011-11-10 19:00:12

标签: c doxygen cscope

背景
在一个特定的项目中,超过一百个文件中有大约几千个函数。这些函数被分为两组代码存储区 - fast_mem和slow_mem。但是现在,由于fast_mem区域有限,其空间不足以适应任何新代码的变化。

作为代码审查的一部分,我们发现fast_mem中的某些函数没有调用者。但功能列表太大,无法手动逐一检查。

问题:
那么,提出这个问题,是否有一个工具可以列出项目中所有功能的调用者?有了这个,我可以继续删除fast_mem中没有任何调用者的函数。

我使用cscope进行代码浏览以及ctags。但这需要手动输入功能名称。如何获得完整列表可以自动化吗? 我还尝试了Doxygen及其来电图功能。结果使用起来不太舒服。

4 个答案:

答案 0 :(得分:0)

我使用Scientific Toolworks Understand

答案 1 :(得分:0)

如果您的编译器是最近的GCC(或者如果您可以切换到GCC 4.6,可能作为交叉编译器),您可以开发GCC插件或MELT扩展来查找。

当然,如果你是使用函数指针进行技巧(例如,对函数指针进行不可移植的指针运算)原始问题是不可判定的。

实际上,如果你正在使用函数指针,通常唯一合理的说法就是它们只能访问相同签名的函数。

也许该项目非常重要,因此可以自定义编译器,以便在fast_mem和{}之间进行更好的(自动或半自动)权衡。 slow_mem是值得的。这通常是GCC插件或MELT扩展的一个很好的例子(但这需要一些工作日或数周,而不是几小时 - 因为您需要了解内部GCC表示来定制GCC),并且您可能是唯一可以这样做(因为你的问题对于一些奇怪的系统来说非常特殊)。

答案 2 :(得分:0)

假设没有任何奇怪的函数指针游戏正在进行中。然后你可以打破未充分利用的cflow:

http://www.gnu.org/software/cflow/

使用-r标志生成“反向索引”。你会得到每个函数的列表,然后是它的调用位置。您可以为其提供多个文件。

答案 3 :(得分:0)

您可以使用cppcheck之类的静态代码分析工具。 如果您使用--enable=unusedFunction参数调用它,它将警告未使用的功能。