给出了C源程序。为每个定义的函数确定 来源,呼叫数量以及呼叫发生的行。
我能想到的最好的事情是grep -c 'function (' code.c
但是这只有在我知道函数名称时才有效,并且它只提供调用次数(考虑到该文件中没有原型)。不知道还有什么可以开始,所以任何建议都会得到很好的满足。
答案 0 :(得分:6)
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[])
这有助于您入门吗?
答案 1 :(得分:2)
从http://en.wikipedia.org/wiki/Cscope下载cscope(http://cscope.sourceforge.net/),然后执行以下操作(检查选项/语法):
1)从源文件构建数据库(我将其命名为db.csc):
cscope -b -u -f db.csc *.c *.h ....
2)在数据库中搜索所有函数调用:
cscope -d -f db.csc -L -3 '.*'
它将为您提供每个函数的列表+它调用的函数+发生调用的行号。您可能需要阅读手册页并稍微玩一下这些选项,因为我上次这样做了几年。
答案 2 :(得分:-2)
你最好只需几步即可。
首先,使用grep和awk从文件中获取所有函数名称并将其保存在临时文件中。类似的东西:
$ grep ^function code.c | awk '{print $2 }' > /tmp/toto
接下来,对于临时文件中的每个条目,搜索code.c文件中函数名称的所有出现,并获取每个调用的行号。类似的东西:
cat /tmp/toto | while read line; do
grep -n $line code.c
echo total: `grep $line code.c | wc -l` times
done
希望它有所帮助。