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

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


person shergill    schedule 22.07.2009    source источник
comment
Вы должны добавить теги Linux и C ++. Вы, вероятно, получите лучший ответ и разнообразие мнений.   -  person Duck    schedule 23.07.2009
comment
Похоже на дубликат stackoverflow.com/questions/375913/.   -  person Michael Myers    schedule 23.07.2009
comment
например: likwid, LLTng, oprofile, valgrind, vtune, gprof, perf, gperftools, pTop   -  person Shan    schedule 18.02.2014
comment
См. Этот вопрос о наклоне: slant.co/improve/topics/1005   -  person ideasman42    schedule 27.06.2017


Ответы (9)


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

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

eg:

gcc -pg -o whatever whatever.c

./whatever

gprof whatever gmon.out

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

person smcameron    schedule 23.07.2009
comment
Профилировать неоптимизированный код бессмысленно, не правда ли? Точно так же код профилирования, который был сильно изменен с помощью -pg, часто вводит вас в заблуждение, оптимизируя неправильные места. - person federal; 05.01.2012
comment
-pg - это параметр компоновщика, а не компилятор - person Slug Pue; 18.03.2018

valgrind - хорошо известный профилировщик Linux.

person dfa    schedule 22.07.2009
comment
думал, что valgrind был больше для проверки утечки памяти .. Я пытаюсь увидеть, какие функции вызываются и т. д. - person shergill; 23.07.2009
comment
используйте инструмент пакета под названием callgrind - person dfa; 23.07.2009
comment
Valgrind - это просто платформа для создания динамических инструментов. Хотя он стал синонимом Memcheck, инструмента, построенного на Valgrind. Callgrind неплохо умеет профилировать. - person Falaina; 23.07.2009
comment
valgrind.org/docs/manual/cl-manual.html - person xaxxon; 26.01.2017

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

person XWare    schedule 10.02.2010
comment
Просто попробовал эту программу, это действительно здорово! В настоящее время мой любимый профилировщик в Linux; однако стоит упомянуть, что для эффективного профилирования требуется, чтобы код был построен с -fno-omit-frame-pointer. - person Nik Reiman; 20.03.2015
comment
Ссылка кажется мертвой. Кто-нибудь знает, где (или если) его можно найти в другом месте? - person Simon F; 16.06.2017

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

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

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

person Falaina    schedule 22.07.2009
comment
+1 за опрофайл, это непростой инструмент - person dfa; 23.07.2009
comment
Ха-ха, правда. Мне, наверное, не следовало бы делать этот звук таким простым :) Это, конечно, не так просто, как запускать программу под ним, как инструменты Vtune и Valgrind, но я чувствую, что вы довольно быстро к этому привыкаете. - person Falaina; 23.07.2009
comment
oprofile выглядит интересно - поддерживает ли он x86_64? - person LiraNuna; 23.07.2009
comment
К сожалению, VTune не бесплатен ни для каких целей. - person rustyx; 28.02.2019

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

person Milan Babuškov    schedule 23.07.2009

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

person Dirk Eddelbuettel    schedule 23.07.2009

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

person twk    schedule 22.07.2009

Взгляните на Sysprof. Скорее всего, в вашем дистрибутиве он уже есть.

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

person Søren Sandmann    schedule 24.02.2013

Это то, что я использую.

person Mike Dunlavey    schedule 09.08.2009
comment
вы просто основываете свое суждение об узком месте на 10 образцах, собранных вами вручную, вместо 1000 образцов, собранных prof. - person Dmitry Grigoryev; 06.01.2021
comment
@DmitryGrigoryev: Верно, и это на самом деле говорит вам, что вам следует исправить. Статистическое объяснение находится здесь. Фактически, первая ошибка, которую делают люди, - это думать, что они ищут узкое место, а не совершенно хороший, но расточительный код ;-) - person Mike Dunlavey; 06.01.2021
comment
Приятно читать, спасибо. Я полностью согласен с вашей точкой зрения, что оптимизировать намного проще, когда вы видите фактический вызов функции в отладчике. И я понимаю, что узкое место означает не хорошую цель оптимизации, а только потенциальную. Тем не менее, я думаю, что в любом случае имеет смысл начать с prof: если я увижу, что f() является наиболее проблемной функцией статистически, я остановлю программу несколько раз, пока не попаду в f(), вместо того, чтобы просто начать со случайной функции, на которой я остановился первой. . - person Dmitry Grigoryev; 07.01.2021