在编译时宏下查找函数/宏调用的数量

时间:2011-05-08 04:18:32

标签: c function macros

我有这个问题,我必须找到在我的代码中调用特定宏/函数的次数?我知道你可能会想为什么我不运行find / grep。但我的问题是被调用的函数/宏是在特定的编译时宏。所以我想只在启用此特定编译时宏时才能找到调用次数。我想在整个代码中找到调用次数(静态分析,而不是运行时)。代码库非常庞大(数百万行代码),完全在Linux上的C语言中。我试图使用readelf,但我无法真正提取所需的信息。任何帮助将不胜感激。

提前致谢。 〜n的

2 个答案:

答案 0 :(得分:2)

许多C编译器都有一个标志来输出预处理器阶段的中间输出(定义了相关的条件编译器符号)。然后,您可以在此输出上运行find / grep。

答案 1 :(得分:0)

如何嵌入一些独特的单词(如下面的MARKER) 在上述宏中,并计算单词出现的次数?
例如,假设代码a.c如下所示:

#define A f() MARKER
#define B A; A;
B

标记出现的计数将通过命令获得 以下内容:

gcc -E a.c | sed -r 's/[^A-Za-z0-9_]+/\xa/g' | grep MARKER | wc -l

测量后,需要删除宏中的MARKER#define d清空为:

#define MARKER

修改 如果您的构建系统是make,则可能需要添加新规则,例如 跟随当前的makefile以制作预处理文件:

SRCS = a.c

preprocessed: $(SRCS:.c=.i)

%.i: %.c
    $(CC) -E $(CPPFLAGS) -o $@ $<

如果所有设置都已正确完成, 使用make preprocessedfind -type f -name '*.i'或类似内容 命令,将获取所有预处理的文件。 可能这不是一件容易的事。 如果你陷入困境, 我建议将其作为一个新问题发布。