Мне нужно профилировать код, работающий на C ++ в Linux. Ребята, вы можете порекомендовать профайлеров?
Что такое хороший простой в использовании профилировщик для C ++ в Linux?
Ответы (9)
Используйте gprof.
Просто скомпилируйте с флагом -pg
(я думаю (но не уверен), что вам нужно выключить оптимизацию.) И используйте gprof для анализа файла gmon.out, который затем создаст ваш исполняемый файл.
eg:
gcc -pg -o whatever whatever.c
./whatever
gprof whatever gmon.out
То же самое с g ++ и cpp.
valgrind - хорошо известный профилировщик Linux.
Масштабирование из RotateRight (http://www.rotateright.com) - это то, что я использовал. Он имеет вид бабочек функций, и вы можете дважды щелкнуть любую функцию, чтобы погрузиться в исходный или asm-код. Выполните сборку с отладочной информацией (-g), чтобы увидеть исходный код, но вам все равно следует создавать и профилировать оптимизированный код.
-fno-omit-frame-pointer
.
- person Nik Reiman; 20.03.2015
Я поклонник Oprofile. Он включает в себя установку модуля ядра и требует некоторого обучения, но он довольно мощный и очень хорошо работает для оптимизированных программ / программ без отладочных символов.
Vtune - еще один очень мощный профилировщик от Intel. Я считаю, что версия для Linux бесплатна для некоммерческого программного обеспечения.
Существует также набор инструментов Valgrind, предложенный dfa. Callgrind, вероятно, будет тем, что вас больше всего интересует. Cachegrind (чей набор функций является подмножеством Callgrind) и Massif также интересны, но у меня нет опыта работы с последними.
Взгляните на KCacheGrind, который представляет собой графический интерфейс для valgrind и делает его действительно простым в использовании.
У Google также есть хороший профилировщик как часть google-perftools - которые включены в Debian / Ubuntu и, возможно, в другие дистрибутивы.
gprof - это стандартный инструмент GNU для профилирования.
Взгляните на Sysprof. Скорее всего, в вашем дистрибутиве он уже есть.
Обратите внимание, что все упомянутые профилировщики работают лучше всего, если ваше приложение скомпилировано с указателями кадров. То есть вы должны использовать -fno-omit-frame-pointer в командной строке gcc.
prof
.
- person Dmitry Grigoryev; 06.01.2021
prof
: если я увижу, что f()
является наиболее проблемной функцией статистически, я остановлю программу несколько раз, пока не попаду в f()
, вместо того, чтобы просто начать со случайной функции, на которой я остановился первой. .
- person Dmitry Grigoryev; 07.01.2021