c ++: генерировать дерево вызовов функций - PullRequest
5 голосов
/ 13 ноября 2009

Я хочу проанализировать текущие файлы c ++ в проекте и перечислить все методы / функции в нем, а затем сгенерировать деревья вызовов функций и вызывающих. F.G. вы можете указать, как doxygen генерирует дерево вызовов.

Я проверил gccxml, но в нем не перечислены функции, вызываемые из другой функции.

Пожалуйста, предложите мне несколько легких инструментов (с открытым исходным кодом), которые я могу использовать.

спасибо!

Ответы [ 5 ]

6 голосов
/ 13 ноября 2009

Статическое дерево вызовов не обязательно является деревом вызовов времени выполнения. Обратные вызовы и виртуальные функции мутят воду. Таким образом, статический анализ может дать вам только часть ответа.

Единственный способ получить надежное дерево вызовов - запустить gprof на скомпилированном исполняемом файле. Вывод может быть преобразован в очень точное дерево вызовов.

4 голосов
/ 13 ноября 2009

gccxml, в настоящее время, по существу, игнорирует тела функций (включая вызовы других функций). Хороший обзор доступных вариантов синтаксического анализа в C ++: здесь - не обязательно носитель хороших новостей, но рекомендуется прочитать.

2 голосов
/ 13 ноября 2009

Вы упомянули Doxygen. Почему бы не использовать это?

0 голосов
/ 30 ноября 2012

Невозможно предоставить полный анализ дерева вызовов для приложения, которое зависит от приема асинхронных событий. Это способ у нас есть тест. Даже в самых простых случаях, когда приложение полностью детерминировано, это может быть довольно сложной задачей, и я бы поспорил предоставить предельную стоимость. Тогда как бы вы проанализировали результаты? Для чего?

0 голосов
/ 04 октября 2010

Я, наверное, неправильно понял, но в Visual Studio есть нечто подобное. Щелкните правой кнопкой мыши функцию и выберите Обозреватель вызовов.

...