Создание дерева callview проекта C


Мне приходится работать с довольно малоизвестным проектом на языке Си, который содержит около 500 файлов и 250 тысяч строк почти без документации. Хуже того, половина проекта написана в сборке. Я знаю, это смешно...

В любом случае, чтобы получить общий обзор структуры кода, я хотел бы создать представление дерева вызовов немного лучше, чем то, что Doxygen может сделать с Graphviz.

Поэтому я собираюсь написать свой собственный синтаксический анализатор и средство просмотра, используя ctags и cytoscape. Но перед этим хотелось бы узнать, доступны ли уже такие хорошие программы и можно ли их использовать с императивными языками.

Например, это то, что я ожидаю для кода ниже

Главная.c

void main() {
   foo(1);
}

Фу.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)|--------------+     
                               +----------+                    
1   3  

1 ответ:

Я взглянуть на CodeQuery: https://ruben2020.github.io/codequery/

Он тянет в ctags и cscope базы данных и делает всевозможные причудливые вещи, включая (по-видимому) генерацию графов вызовов, хотя я никогда не пробовал эту конкретную функцию. Он также поддерживает намного больше, чем C.