3

背景:
在一个特定的项目中,数百个文件中有大约数千个函数。这些函数被划分为驻留在两个代码内存库中 - fast_mem 和 slow_mem。但是现在,由于 fast_mem 区域是有限的,它的空间已经不足以容纳任何新的代码更改。

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

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

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

4

4 回答 4

0

让我们假设没有任何奇怪的函数指针游戏正在进行。然后你可以打破使用不足的cflow:

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

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

于 2011-11-10T19:25:35.553 回答
0

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

于 2011-11-10T19:25:58.223 回答
0

我使用 Scientific Toolworks了解

于 2011-11-10T19:04:32.977 回答
0

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

当然,如果您正在使用函数指针(例如函数指针上的不可移植指针算术)做一些技巧,那么原始问题是无法确定的。

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

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

于 2011-11-10T19:20:30.780 回答