В Linux имеется достаточно большое количество средств для профилирования приложений, наиболее распространенными из них являют valgrind, gprof и oprofile. В valgrind имеется инструмент callgrind, который позволяет собирать статистику по вызовам различных функций. Для анализа результатов есть замечательное приложение — kcachegrind, позволяющее достаточно удобно просматривать узкие места, находить пути, по которым код приходит в эти места.
Это замечательный утилиты, которые позволяют найти узкие места в коде, однако у использования данных утилит есть несколько минусов:
Valgrind значительно понижает скорость выполнения программы
Во всех данных утилитах отсутствует возможность посмотреть изменение выполнения кусков кода во времени
Нет возможности посмотреть не функцию целиком или отдельную строку, а логический модуль.
Эти особенности общие для всех утилит профайлинга, не требующих изменения исходного кода приложения.