2015-04-03 76 views
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)|--------------+  
           +----------+      
+2

有一个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

+0

你有什么操作系统?这与问题有关。 – 2015-04-04 18:29:45

+0

@Cyber​​Spock我会说Linux – nowox 2015-04-10 20:33:02

回答

1

我'看看CodeQuery :https://ruben2020.github.io/codequery/

它拉扯ctags和cscope数据库,并做各种花哨的东西,包括(显然)生成调用图,虽然我从来没有尝试过这个特定的功能。它也支持比C多很多。