8

我正在编写一个工具,我需要为一些 C 项目生成调用图。我能够使用 clang 生成一个文件的调用图,但我无法找出如何在包含数十个头文件和源文件的整个项目中生成调用图。

任何可以将调用图生成到可以解析的文件的工具都可以。一个可用的库会更好。

4

2 回答 2

3

另外值得一提的是,优秀的GNU cflow

GNU cflow 分析一组 C 源文件并打印一个图表,绘制程序内的控制流图表。

GNU cflow 能够为 C 源代码生成直接流程图和反向流程图。可以选择生成交叉引用列表。实现了两种输出格式:POSIX 和 GNU(扩展)。

输入文件可以选择在分析之前进行预处理。

编辑
至于图书馆请求。您可能想“调整”output.c而不是打印对数据做其他事情。内部流程被组织成输出处理程序,所以我认为编写自己的处理程序已经可以解决问题。虽然它不是开箱即用的。

于 2012-07-26T15:05:06.803 回答
2

将我的评论变成答案。

您可以使用脚本查看程序集输出和处理。假设 gcc 在 linux 上,您将-S标志传递给gcc并使用以下内容处理结果:

perl -ne '/^([^. \t#].*):/ and $f=$1;/call\s+([^*]\S*)/ and print "$f -> $1\n";' *.S

这将为每个静态调用提供一行,包含调用和被调用的函数。您可以在其周围添加一些样板并将结果提供给dot,或者您想用它做的任何事情。

您也可以省略正则表达式的“不得以星号开头”部分,以获得间接调用的一些指示。您仍然无法确定此时将调用哪些函数,但至少您会知道还有更多需要了解的东西。

于 2012-07-26T14:56:00.697 回答