Мне нужно профилировать некоторый код, запускающий С++ в 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.