给出了交流源程序。确定源中每个已定义函数的调用次数以及调用发生的行。
我能想到的最好的事情是,grep -c 'function (' code.c
但这只有在我知道函数名称的情况下才有效,并且它只会提供调用次数(考虑到该文件中没有原型)。不知道还有什么开始,所以任何建议都会得到很好的满足。
ctags
可以可靠地为您提供函数名称列表,例如
$ cat test.c
#include <stdio.h>
void foo(void)
{
printf ("Hello World!\n");
}
int main(int argc, char *argv[])
{
foo();
return 0;
}
$ ctags -x --c-types=f test.c
foo function 3 test.c void foo(void)
main function 8 test.c int main(int argc, char *argv[])
这对您开始有帮助吗?
从http://cscope.sourceforge.net/下载 cscope ( http://en.wikipedia.org/wiki/Cscope ) ,然后执行以下操作(检查选项/语法):
1) 从您的源文件构建数据库(我将其命名为 db.csc):
cscope -b -u -f db.csc *.c *.h ....
2)在数据库中搜索所有函数调用:
cscope -d -f db.csc -L -3 '.*'
它会给你一个每个函数的列表+它调用的函数+调用发生的行号。您可能需要阅读手册页并稍微使用选项,因为我上次这样做已经有好几年了。
你最好分几步来做。
首先,使用 grep 和 awk 从文件中获取所有函数名称并将其保存在一个临时文件中。就像是:
$ grep ^function code.c | awk '{print $2 }' > /tmp/toto
接下来,对于 temp 文件中的每个条目,在 code.c 文件中搜索所有出现的函数名称并获取每个调用的行号。就像是:
cat /tmp/toto | while read line; do
grep -n $line code.c
echo total: `grep $line code.c | wc -l` times
done
希望能帮助到你。