Этот вопрос может потребовать уточнения, чтобы выбрать между тем, что в настоящее время являются 2 ответами. Зависит от того, что вам нужно:
1) Вам необходимо знать, сколько раз каждая функция вызывается в формате прямого списка / графика функций, соответствующих количеству вызовов. Это может привести к неоднозначным / неубедительным результатам, если ваш код не является процедурным (то есть функции, вызывающие другие функции в разветвленной структуре без неоднозначности того, что вызывает что). Это базовая функциональность gprof, требующая перекомпиляции с флагом -pg.
2) Вам нужен список функций в том порядке, в котором они были вызваны, это зависит от вашей программы, которая является наилучшей / выполнимой опцией:
а) Если ваша программа запускается и завершается без ошибок времени выполнения, вы можете использовать для этой цели gprof.
б) Опция ELSE, описанная выше с использованием dbg с регистрацией и точками останова, является опцией, которую я изучил после прочтения этого.
3) Вам необходимо знать не только порядок, но, например, аргументы функции для каждого вызова. Моя текущая работа - это моделирование в физике переноса частиц, так что это было бы АБСОЛЮТНО полезно для отслеживания того, откуда поступают аномальные результаты ... то есть, когда аргументы, передаваемые вокруг, перестают иметь смысл. Я полагаю, что один из способов сделать это - это вариация того, что делал Employed Russian, за исключением использования следующего:
(gdb) info args
Регистрация результатов этой команды с каждой точкой останова (устанавливается при каждом вызове функции) дает аргументы текущей функции.