Используйте callgrind (cmdline) и затем kcachegrind (gui) для визуализации деревьев вызовов.Это один из инструментов из набора 'valgrind'.
Callgrind - это инструмент профилирования, который также позволяет увидеть полное дерево вызовов.Вы собираете информацию о профилировании, запустив ее в своей программе, затем анализируете вывод информации callgrind с помощью kcachegrind.
Дополнительное редактирование: К сожалению, как я только что узнал, это будет работать только частично для рекурсивных вызовов, которые в этом случае будут выглядеть как заглушка, вызывающая себя несколько раз.Несмотря на то, что callgrind создаст динамический граф вызовов, он не сможет показать переданные и возвращенные значения.Инструмент статического callgraph будет иметь тот же вывод (без количества вызванных вызовов).
Это будет выглядеть так, а не то, что вы хотите:
Я предполагаю, что единственный способ выяснить, в какой последовательности и с какими параметрами и возвращаемыми значениями была вызвана рекурсивная функция, - это выполнить backtrace (функцию gdb или backtrace ()) и визуализировать этот вывод (через graphviz).Для этого есть инструменты, но, насколько я знаю, они не находятся в свободном доступе / с открытым исходным кодом.