2015-04-03 133 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多很多。