2
我有一个相当不起眼的C++项目大约是500个文件和25万线,几乎没有文档工作的callview树。更糟的是,项目的一半是用汇编编写的。我知道,这是荒谬的...生成一个C项目
无论如何,为了获得代码结构的一般概述,我想生成一个比Doxygen可以用Graphviz做得更好的调用树视图。
所以我即将编写我自己的解析器和查看器,使用ctags的输出和cytoscape。但在此之前,想知道这样的好程序是否已经可用并且可以使用命令式语言。
例如,这就是我下面
的main.c
void main() {
foo(1);
}
foo.c的
void foo(int a) {
bar(a);
baz(a);
}
void baz(int a) {
bar(2);
}
输出期望的代码:
+------+ +----------+ +----------+ +----------+
|main.c| |foo.c | |foo.c | |bar.c |
|main()|---->|foo(int a)|--+-->|foo(int a)|------->|bar(int a)|
+------+ +----------+ | +----------+ +----------+
| ^
| +----------+ |
| |foo.c | |
+-->|baz(int a)|--------------+
+----------+
有一个POSIX命令['cflow'](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/cflow.html) ,并且有一个GNU实现[ 'cflow'](http://www.gnu.org/software/cflow/)。这应该确定调用图。一致地提出这个问题可能更成问题。必须有可用的工具来完成它。在你的图中,为什么'foo()'被记录为递归的(调用'foo()')? – 2015-04-03 20:53:16
你有什么操作系统?这与问题有关。 – 2015-04-04 18:29:45
@CyberSpock我会说Linux – nowox 2015-04-10 20:33:02