GDB не справился бы с этим хорошо, хотя вы наверняка могли бы взломать что-то, что дало бы крайне неточные результаты.
Я бы предложил плагин Valgrind "Callgrind".В качестве бонуса он не требует абсолютно никакой перекомпиляции или других специальных настроек.Все, что вам нужно, это установить в вашей системе valgrind и отладить информацию в вашей программе (или, по крайней мере, полную символьную информацию; я не уверен).
Затем вы вызываете свою программу следующим образом:
valgrind --tool=callgrind <your program command line>
Когда это будет сделано, в текущем каталоге появится имя файла callgrind.out.<pid>
.Вы можете прочитать и визуализировать этот файл с помощью очень приятного графического инструмента под названием kcachegrind
(обычно его нужно устанавливать отдельно).
Единственная проблема заключается в том, что, поскольку callgrind слегка замедляет выполнение вашей программы,время, затрачиваемое на системные вызовы, может оказаться меньше (в процентах), чем на самом деле.По умолчанию callgrind не включает системное время в свои счетчики, поэтому значения, которые он вам дает, представляют собой реальное сравнение кода в вашей программе, если не фактическое время «под» этой функцией.Сначала это может сбить с толку, поэтому, если это произойдет, попробуйте добавить --collect-systime=yes
.
Я не уверен, каким может быть состояние callgrind в ARM.ARMv7 указан в качестве поддерживаемой платформы , но говорит только «довольно полный», что бы это ни значило.