Зависит от того, насколько вы хотите быть традиционными.
gprof
делает то, что вы упомянули. Вот несколько комментариев по этому поводу.
Существует школа мысли, которая говорит, что профилирование - это измерение.Измерение что?Ну, что угодно - только измерения.Наряду с этим идет мысль о том, что вы хотите получить «общую картину» того, что происходит.Эта школа, в основном, пытается найти «медленные функции», не определяя, что это вообще означает, и не советуя вам искать оптимизацию.
Другая школа говорит, что вы действительно отлаживаете.Вы хотите точно найти ошибки определенного типа - те, которые не делают программу неправильной, скорее, они занимают слишком много времени.Это не большие вещи.Это очень точные точки в коде, где происходит что-то, что стоит намного больше времени, чем необходимо.Точно, сколько еще не важно.Важно то, что он расположен, чтобы его можно было починить.С этой точки зрения профилирование служебных данных не имеет значения, как и точность измерения.Для измерения нужно посмотреть, сколько времени было сэкономлено.
Один из профилировщиков, который, я думаю, успешно охватывает оба лагеря, - это Zoom , потому что он производит выборку стека вызовов на настенных часахвремя и представляет, на уровне строки / инструкции, процент времени в стеке.Некоторые другие профилировщики тоже это делают, но большинство этого не делают.
Я учусь во второй школе, и вот пример того, что вы можете сделать с его помощью.
Вот более краткое обсуждение вопросов.