Я предполагаю, что необходимо найти код, который занимает значительное время и который вы могли бы оптимизировать, чтобы сэкономить это время. Это другая цель, отличная от времени.
Я скептически отношусь к статическим анализаторам, потому что все зависит от набора входных данных.
Динамический инструментарий пытается измерить свойства функций, такие как: собственное время и общее время, абсолютное, среднее и процентное соотношение. Также учитывается количество вызовов и роль каждой подпрограммы в графе вызовов.
Динамические инструменты (а-ля gprof ) были стандартом де-факто на протяжении десятилетий, но это очень далеко от последнего слова. Во-первых, важно понимать, что в большинстве статистических данных, которые он вам дает, не хватает смысла с точки зрения вашей первоначальной потребности.
В наши дни (ИМХО) вам нужен профилировщик выборки, который производит выборку стека вызовов, а не только счетчик программы. Это должно сэмплироваться по времени настенных часов, а не только по времени процессора. Образцы не должны быть взяты на высокой частоте. Он должен подавлять выборку, когда приложение ожидает ввода данных пользователем. Он должен давать вам информацию на уровне строки или инструкции, а не только на уровне функций. Самая важная статистика, которую она должна предоставить для строки кода, - это процент выборок, в которых она содержится, поскольку это наиболее прямая мера времени, которую можно сохранить, если оптимизировать эту строку.
Это могут сделать несколько профилировщиков, в частности Oprofile и RotateRight / Zoom.