生成C项目的callview树

Generate callview tree of a C project

我必须处理一个相当晦涩的 C 项目,该项目大约有 500 个文件和 25 万行,几乎没有文档。更糟糕的是,项目的一半是用汇编语言编写的。我知道,这很荒谬...

无论如何,为了大致了解代码结构,我想生成一个比 Doxygen 用 Graphviz 做的更好的调用树视图。

所以我准备使用 ctags's output and 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)|--------------+     
                               +----------+                    

我会看一下 CodeQuery:https://ruben2020.github.io/codequery/

它引入 ctags 和 cscope 数据库并执行各种奇特的操作,包括(显然)生成调用图,尽管我从未尝试过该特定功能。它也比 C 支持更多。