2009-07-22 2 views
65

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

+1

Вы должны добавить теги Linux и C++. Вероятно, вы получите лучший ответ и диапазон мнений. – Duck

+1

Выглядит как дубликат http://stackoverflow.com/questions/375913/what-can-i-use-to-profile-c-code-in-linux. –

+0

например: likwid, LLTng, oprofile, valgrind, vtune, gprof, perf, gperftools, pTop – Shan

ответ

17

valgrind это хорошо знаю линукс профайлер

+0

думал, что valgrind больше для утечки памяти проверка. Я пытаюсь увидеть, какие функции получаются и т. д. – shergill

+8

использовать набор инструментов «callgrind» – dfa

+1

Valgrind - это просто основа для создания динамических инструментов. Хотя, это стало синонимом Memcheck, инструмента, построенного на Valgrind.Callgrind довольно хорош в профилировщике. – Falaina

11

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

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

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

+0

+1 для oprofile, это не «простой инструмент» – dfa

+1

Ха-ха, правда. Я, наверное, не должен так сильно звучать так просто :) Это, конечно, не так просто, как «запустить программу под ней» как инструменты Vtune и Valgrind, но я чувствую, что вы привыкли к этому довольно быстро. – Falaina

+0

oprofile выглядит интересно - поддерживает x86_64? – LiraNuna

2

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

4

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

5

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

34

Использование gprof.

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

например:

gcc -pg -o whatever whatever.c 

./whatever 

gprof whatever gmon.out 

То же самое с г ++ и каст.

+20

Профилирование неоптимизированного кода немного бессмысленно, не так ли? Аналогично, код профилирования, который был сильно изменен с помощью -pg, часто вводит вас в заблуждение для оптимизации неправильных точек. – federal

13

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

+0

Просто дал этой программе выстрел, это действительно очень приятно! В настоящее время мой любимый профилировщик на Linux; однако стоит упомянуть, что для эффективного профилирования требуется создание кода с помощью '-fno-omit-frame-pointer'. –

+1

Ссылка кажется мертвой. Кто-нибудь знает, где (или если) его можно найти в другом месте? –

2

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

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