С++ зависимость кода /call -graph "viewer"?

есть ли такая вещь, как (бесплатный) инструмент, который отображает график всех функций, вызываемых в данной функции? Например, если я использую его в сложной функции fun(), которую я пытаюсь понять, он покажет мне все функции, называемые fun() по порядку, тогда у меня будет возможность увидеть одно и то же для функции вызываемые fun() и т.д. Я ищу это для кода на С++. Существует ли такая вещь?

edit: Я использую VS 2008, если это помогает, но я думал, что такое ПО будет работать в исходных файлах в любом случае

Ответы

Ответ 1

Doxygen может это сделать. См. Параметр конфигурации CALL_GRAPH:

Если теги CALL_GRAPH и HAVE_DOT установлены на YES, то doxygen будет генерировать график зависимостей вызовов для каждой глобальной функции или метода класса. Обратите внимание, что включение этой опции значительно увеличит время прогона. Поэтому в большинстве случаев лучше включить графики вызовов для выбранных функций только с помощью команды \callgraph.

Ответ 2

Да, Eclipse CDT Иерархия вызовов показывает именно это. Более того, этот вид имеет 2 варианта:

  • Показать вызывающих абонентов
  • Показать Callees

Вы спрашиваете о втором, но я предпочитаю первый в анализе кода.

Ответ 3

Intel (R) Single Event API - бесплатный проект с открытым исходным кодом, который использует GraphVis для визуализации графиков вызовов. Требуется немного труда для ручного или компилятора-автоматизированного инструментария, но помимо статистики и графиков вызовов вы также получите сверхурочные. Пример изображения, которое вы можете получить

Ответ 4

Да, такие вещи существуют. Google под заголовком статического анализа кода. Существуют, например, такие инструменты, как "Понять" , и очень вероятно, что ваш компилятор тоже сможет это сделать, за что я ссылаюсь на вашу документацию.

Ответ 5

Вы можете использовать callgrind, и это инструмент графического интерфейса kcachegrind.

Ответ 6

g++, и большинство компиляторов могут делать то, что вы хотите. Он называется профилирование. Также есть oprofile. Профилировщик дает вам график вызовов приложения after его выполнение. Это очень полезно для изучения кода, вы также можете пройти через вывод [debug], когда смотрите на график. Анализатор кода, напротив, даст вам все возможные пути вызова, однако вы не сможете легко увидеть значительный путь.

Ответ 7

Я не знаю ни одного инструмента, специально предназначенного для этого. Однако есть несколько способов сделать это:

  • Использование IDE (QtCreator является бесплатным, Visual Studio Express также может быть полезным, Eclipse CDT)
  • Использование (ctags) [http://ctags.sourceforge.net/] и текстового редактора.
  • Использование callgrind и нескольких просмотров. Преимущество: вы можете увидеть функции, которые действительно называются. Недостаток: работает только в unixes, и вам нужно профилировать.
  • Использование Doxygen... это действительно интересно, поскольку он генерирует html-представление вашего кода при условии, что вы предоставите правильные параметры.

Ответ 8

Профилер VС++ 2008/2010 генерирует среди прочего файл * CallerCalleeSummary.csv, который содержит эту информацию. И это ссылка на статью, объясняющую, как использовать ее с образцовой программой: Профилирование приложений С++ в Visual Studio