1

给出了交流源程序。确定源中每个已定义函数的调用次数以及调用发生的行。

我能想到的最好的事情是,grep -c 'function (' code.c 但这只有在我知道函数名称的情况下才有效,并且它只会提供调用次数(考虑到该文件中没有原型)。不知道还有什么开始,所以任何建议都会得到很好的满足。

4

3 回答 3

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[])

这对您开始有帮助吗?

于 2013-04-05T08:19:58.623 回答
2

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 '.*'

它会给你一个每个函数的列表+它调用的函数+调用发生的行号。您可能需要阅读手册页并稍微使用选项,因为我上次这样做已经有好几年了。

于 2013-04-05T16:26:06.313 回答
-2

你最好分几步来做。

首先,使用 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

希望能帮助到你。

于 2013-04-04T23:11:42.883 回答