2015-04-03 2 views
2

Мне нужно работать с довольно неясным проектом C, который составляет около 500 файлов и 250 тыс. Строк без документации. Хуже того, половина проекта написана в сборке. Я знаю, это смешно ...Генерирование дерева вызова проекта 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()')? –

+0

какая у вас ОС? это имеет отношение к вопросу. –

+0

@CyberSpock Я бы сказал, Linux – nowox

ответ

1

I Посмотрите на CodeQuery : https://ruben2020.github.io/codequery/

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

Смежные вопросы