我正在编写一个工具,我需要为一些C项目生成调用图。 我能够使用clang生成一个文件的调用图,但是我无法找到如何在整个项目中生成包含数十个头文件和源文件的调用图。
任何可以生成可解析文件的调用图的工具都可以。一个可用的库会更好。
答案 0 :(得分:3)
另外值得一提的是,优秀的GNU cflow:
GNU cflow分析C源文件的集合并打印图表,绘制程序内的控制流程。
GNU cflow能够为C源生成直接和反向流程图。可选地,可以生成交叉引用列表。实现了两种输出格式:POSIX和GNU(扩展)。
在分析之前,可以选择预处理输入文件。
修改强>
至于图书馆的要求。您可能希望“调整”output.c
而不是使用数据打印其他内容。内部流程被组织成输出处理程序,所以我认为编写自己的处理程序已经可以解决问题了。但它并不是开箱即用的。
答案 1 :(得分:1)
将我的评论转化为答案。
您可以查看使用脚本的程序集输出和处理。假设在linux上使用gcc,你将-S
标志传递给gcc
并用这样的结果处理结果:
perl -ne '/^([^. \t#].*):/ and $f=$1;/call\s+([^*]\S*)/ and print "$f -> $1\n";' *.S
这将为每个静态调用提供一行,包含调用和被调用的函数。您可以在其周围添加一些样板,并将结果提供给dot
,或者您想要用它做什么。
您可以省略正则表达式中的“一定不能以明星开头”部分来获取间接调用的一些指示。你仍然无法告诉那时会调用什么函数,但至少你会知道还有更多要知道的东西。