Какой хороший простой в использовании профилировщик для С++ в Linux?

Мне нужно профилировать некоторый код, запускающий С++ в Linux. Можете ли вы, ребята, рекомендовать некоторые профилировщики?

Ответ 1

Используйте gprof.

Просто скомпилируйте с флагом -pg (я думаю (но не уверен), что вам нужно включить оптимизацию.) и используйте gprof для анализа файла gmon.out, который затем выполнит ваш исполняемый файл.

например:

gcc -pg -o whatever whatever.c

./whatever

gprof whatever gmon.out

То же самое с g++ и cpp.

Ответ 2

valgrind является хорошо известным профилировщиком Linux

Ответ 3

Увеличение от RotateRight (http://www.rotateright.com) - это то, что я использовал. Он имеет функцию просмотра бабочек, и вы можете дважды щелкнуть любую функцию, чтобы погрузиться в исходный код или код asm. Создайте с помощью отладочной информации (-g), чтобы увидеть свой источник, но вы все равно должны создать и оптимизировать оптимизированный код.

Ответ 4

Я поклонник Oprofile. Он включает в себя установку модуля ядра и немного кривую обучения, но он достаточно мощный и отлично работает для оптимизированных программ и программ без отладки символов.

Vtune - еще один очень мощный профилировщик от Intel. Я считаю, что версия Linux бесплатна для некоммерческого программного обеспечения.

Существует также Valgrind набор инструментов, предложенный dfa. Callgrind, вероятно, будет тем, кого вас больше всего интересует. Cachegrind (чей атрибут является подмножеством Callgrind) и Massif также интересны, но у меня нет опыта с последним.

Ответ 5

Взгляните на KCacheGrind, который является графическим интерфейсом valgrind и делает его очень простым в использовании.

Ответ 6

Google также имеет хороший профилировщик как часть google-perftools - которые включены в Debian/Ubuntu и, возможно, другие дистрибутивы.

Ответ 7

gprof - стандартный инструмент gnu для профилирования.

Ответ 8

Взгляните на Sysprof. Вы, скорее всего, уже имеете это распространение.

Обратите внимание, что все упомянутые профилировщики работают лучше всего, если ваше приложение скомпилировано с помощью указателей на рамки. То есть вы должны использовать -fno-omit-frame-pointer в командной строке gcc.