我有这个问题,我必须找到在我的代码中调用特定宏/函数的次数?我知道你可能会想为什么我不运行find / grep。但我的问题是被调用的函数/宏是在特定的编译时宏。所以我想只在启用此特定编译时宏时才能找到调用次数。我想在整个代码中找到调用次数(静态分析,而不是运行时)。代码库非常庞大(数百万行代码),完全在Linux上的C语言中。我试图使用readelf,但我无法真正提取所需的信息。任何帮助将不胜感激。
提前致谢。 〜n的
答案 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 preprocessed
和find -type f -name '*.i'
或类似内容
命令,将获取所有预处理的文件。
可能这不是一件容易的事。
如果你陷入困境,
我建议将其作为一个新问题发布。