Создать Call-Tree из базы данных cscope - PullRequest
12 голосов
/ 01 февраля 2010

Я хочу сгенерировать деревья полного и частичного вызова из базы данных cscope проектов c и c ++ в Linux.

Проект довольно большой, поэтому работать с полным деревом вызовов проекта может быть непросто, поэтому я хочу ограничить генерацию дерева вызовов с помощью grep-подобного фильтра имен функций.

А также я хочу иметь возможность строить поддеревья под названием "вызвано" и "вызвано из" из любой точки.

Таким образом, инструмент должен быть интерактивным и легко исправляемым.

PS: Я хочу использовать базу данных cscope, потому что она уже используется в проекте и генерируется довольно быстро. Я использую vim editor и у меня система X windows.

На sourceforge есть программа cbrowser, но ее функциональность дерева вызовов (callgraph) нарушена.

Ответы [ 5 ]

3 голосов
/ 30 июля 2010

если вы хотите сделать это с помощью vim, вот способ:

http://www.vim.org/scripts/script.php?script_id=2368

2 голосов
/ 19 сентября 2010

Я попытался «исправить» проблему дерева вызовов в cbrowser (см. http://retprogbug.wordpress.com/2010/09/18/an-attempt-to-resuscitate-cbrowser-0-8/), хотя, будучи полным нубом программирования, я не даю никаких гарантий.

1 голос
/ 13 мая 2013

Я получил этот сценарий Bash на основе cscope для работы в Cygwin & Windows: http://toolchainguru.blogspot.com/2011/03/c-calltrees-in-bash-revisited.html

См. Пример вызова "graph" (я называю это вызовом "tree", упс). См. Пример из ядра Linux.

Требуется cscope (конечно) и graphviz. Он может создавать графики восходящего и нисходящего потоков, а также комбинированные графики восходящего и нисходящего потоков (см. Пример).

Я не демонстрировал это здесь, но этот метод действительно очень хорошо работает в больших проектах, где одна и та же функция может быть определена в нескольких каталогах. Будет только один узел, нарисованный для одного и того же имени функции (так что один «главный» узел, даже если у вас есть несколько main (), определенных в вашей структуре каталогов) --- и у вас будет несколько ребер, исходящих от такого узла , с файловыми / линейными индикаторами. Я обнаружил, что этот аспект более полезен, чем GNU cflow, который настаивал на том, чтобы выбирать только один каталог для просмотра. (Сценарий Jason Nyberg Bash как таковой не очень хорошо работает с многопоточностью, с которой GNU cflow хорошо справляется; кое-что, о чем следует помнить .)

1 голос
/ 15 января 2011

kscope может быть другим вариантом. Я не уверен, что он сделает все, что указано, но он достаточно универсален для приложения с графическим интерфейсом.

Пользователям Ubuntu, испытывающим затруднения при запуске, рекомендуется следовать этим инструкциям .

1 голос
/ 13 февраля 2010

Мне не известны никакие программы, кроме cscope, которые читают базы данных cscope. Даже функциональность cstag в vim просто запускает фоновый процесс cscope, который он запрашивает.

Что касается генерации графа вызовов, если вы не против выйти за пределы cscope, мне скорее нравится то, что создает doxygen. Они могут быть немного большими, но они также генерируют график практически из всех точек, и невероятно легко просматривать источник прямо в нем.

...