Какие хорошие профилировщики для нативного C ++ в Windows?

Я ищу профилировщик для использования с родным C ++. Это, конечно, не обязательно должно быть бесплатным, однако цена действительно влияет на решение о покупке. Это для коммерческой работы, поэтому я не могу использовать лицензионные копии для личного пользования или для учебных заведений.

Ключевые особенности, которые я ищу:

  • Метрики уровня процесса
  • Метрики на уровне компонентов
  • Показатели на уровне строки
  • Поддерживает многопоточный код
  • Удобство использования
  • Расходы
  • Требуется поддержка Visual Studio 2005 Professional (очень желательна поддержка VS 2008 Professional)

Я использовал Intel VTune и Compuware Devpartner Performance Analysis Community Edition.

VTune казался очень мощным, но у него крутая кривая обучения. Он также очень модульный, поэтому вам нужно выяснить, какие детали вам нужно купить.

DevPartner PACE довольно прост в использовании и предоставляет все ключевые функции, однако это всего лишь 45-дневная пробная версия. Лицензионная версия (DevPartner для Visual C ++ BoundsChecker Suite) стоит около 1400 долларов за место, что вполне выполнимо, но, по-моему, немного дорого.

Какие профилировщики подходят для "родного" C ++ и ПОЧЕМУ?


Смотрите также:

Какой ваш любимый инструмент профилирования для C ++?


person Zach Burlingame    schedule 30.09.2008    source источник
comment
: Sigh: Я искал несколько минут C ++ и профилировщик, но ничего не нашел, потому что они использовали профилирование и не использовали тег профилировщика.   -  person Zach Burlingame    schedule 30.09.2008
comment
К сожалению, этот вопрос не является точной копией. Они не заявили своих требований к профилировщику. Дальнейшее обсуждение не содержит подробностей ПОЧЕМУ. Я думаю, что запрос рекомендаций по инструменту с учетом определенных критериев делает более ответственным? чем просить любимого.   -  person Zach Burlingame    schedule 30.09.2008
comment
@Burly: У вас есть хороший аргумент - вы написали хороший, конкретный вопрос, и ответы не обязательно могут соответствовать тем, которые подходят для другого. Я открою заново.   -  person Shog9    schedule 30.09.2008
comment
Какое место занимает Visual Studio почти 8 лет спустя? Я использую встроенный профилировщик с VS 2012, и с каждым выпуском он становится все лучше и лучше. Каковы преимущества (коммерческих) конкурентов в этой сфере сегодня (если таковые имеются)?   -  person IInspectable    schedule 17.05.2016


Ответы (8)


В Windows GlowCode доступен по цене, довольно прост в использовании и предлагает бесплатную пробную версию, чтобы вы могли проверить, работает ли он для ты.

person AShelly    schedule 30.09.2008

Многие люди не знают, но MSFT делает большой прогресс, предоставляя разработчикам лучшие инструменты для повышения производительности бесплатно :-). Они раскрывают всем нам внутреннюю составляющую трассировки Windows: ETW.

perftools

Он является частью нового Windows SDK для server 2008 и Vista. Просто впечатляет, и его необходимо загрузить, если ваша цель - анализ производительности и профилирование под Windows (независимо от языка).

Проверьте документацию здесь, прежде чем вы решите ее скачать:

msdn doc

person antonio    schedule 03.10.2008
comment
IIRC perftool - это скорее монитор производительности системы (загрузка ЦП и диска / сети), а не анализатор кода на уровне функций? - person Martin Beckett; 08.02.2010
comment
Этому не хватает точности для собственно настройки производительности нативных приложений :( - person kfsone; 29.08.2018
comment
Также кажется, что он генерирует такие огромные дампы, что вы не можете разумно профилировать что-либо, что работает в течение длительного периода времени. Я также использовал UIforETW (от разработчиков Chrome). Если вы просто смотрите на базовые значения, это нормально, но если вам нужно глубокое понимание, 30s быстро начнут добавлять до 12 ГБ данных. - person kfsone; 29.08.2018

Попробуйте Intel Parallel Studio. В настоящее время он находится в стадии бета-тестирования, но название Intel говорит само за себя.

http://www.intel.com/go/parallel

person sivabudh    schedule 02.03.2009

Только что нашел Люка StackWalker на SourceForge (http://lukestackwalker.sourceforge.net/). К сожалению, он не фокусируется на поддереве, но по-прежнему удобен в использовании, использует сервер символов (я предлагаю вам настроить его немедленно, если у вас его еще нет), предлагает графическую визуализацию, ...

Обратной стороной является то, что он не показывает накопленное время (выборки) дочерних функций.

Другой альтернативой является «Очень сонный» (http://www.codersnotes.com/sleepy). Он может показывать общее время детей, но, к сожалению, он не использует сервер символов.

person Patrick    schedule 08.02.2010
comment
Последняя версия Very Sleepy может использовать сервер символов. - person Vladimir Panteleev; 11.08.2013
comment
@CyberShadow, ты прав. Версия 0.82 действительно хороша. Не только в отношении использования сервера символов, но и в отношении функциональности «фокус на поддереве». - person Patrick; 02.09.2013
comment
Если вы думаете, что 0.82 действительно хорош, подождите, пока не увидите мою собственную вилку (работа в процессе);) - person Vladimir Panteleev; 02.09.2013
comment
Не могу дождаться, чтобы попробовать это. Спасибо. - person Patrick; 02.09.2013

Также стоит обратить внимание на CodeXL, он может работать как в Linux, так и в Windows, хотя он в основном посвящен отладке и профилированию OpenGL / OpenCL. В разделе профилирования есть вариант выборки по времени для процессоров, который может оказаться полезным. Это также бесплатно и работает, пока доступны файлы pdb (ну, в Windows, я не знаю, как это работает в Linux) (даже для сборок с pdb).

person afree100    schedule 26.09.2013
comment
+1: это был единственный инструмент (среди бесплатных), который мог предоставить какие-либо значимые результаты для моего двоичного файла, встроенного в конфигурацию Release с Visual Studio Community 2017 (C ++, STL, OpenCV) - person AntonK; 30.07.2017

Определенно Visual Studio Team System. Безусловно.

person Alex Budovski    schedule 02.02.2010

Я только что закончил первую пригодную для использования версию CxxProf, портативной библиотеки ручного инструментального профилирования для C ++.

Он соответствует вашим требованиям:

  • Профили многопоточных приложений
  • Поддержка профилирования нескольких процессов в одной сети уже на подходе
  • Он написан с учетом максимального удобства использования и простейшей интеграции.
  • Это бесплатно, как в пиве, и бесплатно, как в речи
  • Он будет работать с VS05,08,10,12 и 13. Как и с g ++ в Linux. В настоящее время он протестирован с VS 2013 Express.

См. вики проекта для получения дополнительной информации.

Заявление об ограничении ответственности: я главный разработчик CxxProf

person MOnsDaR    schedule 23.04.2014

Я написал легкий профилировщик win32 / 64 с открытым исходным кодом, поддерживающий профилирование как процессора, так и памяти, он похож на профилировщик VS, но с уникальной функцией, такой как график пламени данных процессора и памяти. это здесь: dprofiler

person xwlan    schedule 21.12.2014
comment
Я не голосовал против вас - я не люблю этого делать. Но ИМХО вся концепция профилирования основана на массовом самообмане в сообществе программистов и требует доработки. Проверьте этот ответ. - person Mike Dunlavey; 21.12.2014
comment
Майк, я не уверен, проверяли ли вы код, этот профилировщик не работает как gprof (профилирование процессора), он выбирает все потоки и вычисляет веса IP-адресов, сгруппированных в дерево вызовов и т. Д., Перекомпиляция кода не требуется. - person xwlan; 22.12.2014
comment
Майк, мой пост может сбить вас с толку, так как он похож на профилировщик VS, мне нужно пояснить, что его пользовательский интерфейс, счетчики и т. Д. Похожи на профилировщик VS, но работают по-разному. Профилировщик VS (до VS2012) выбирает только IP-адреса. dprofiler, собирая трассировки стека всех потоков, поэтому dprofiler может сгруппировать кадры стека в дерево вызовов. - person xwlan; 22.12.2014
comment
Я уверен, что вы сможете создать дерево вызовов. Теперь несколько вопросов: 1) можете ли вы брать образцы стека во время ввода-вывода, спящего режима или других блоков процесса? 2) Можете ли вы позволить пользователю исследовать отдельные образцы стека с разрешением на уровне строк таким образом, чтобы они могли соотнести их с соответствующим кодом? Я спрашиваю, потому что в противном случае большие ускорения легко спрятать в деревьях вызовов, горячих путях или любом таком резюме, как указывает эта ссылка. Типичное возражение заключается в том, что пользователь не может исследовать достаточное количество образцов, что неверно. Если он видит проблему на 2 образцах, этого достаточно. - person Mike Dunlavey; 22.12.2014
comment
Q1: Да. Сэмплер периодически берет образец независимо от того, что делает целевой поток. в представлении ‹History› каждый образец имеет ассоциированное состояние: выполнение, спящий режим или ввод-вывод (ожидание в ядре). - person xwlan; 22.12.2014
comment
Q2: Инструмент разрешает символ в исходную строку, если есть соответствующий символ (хотя не во всех представлениях). Спасибо за ваши комментарии. Собственно, я ссылался на ваши идеи при разработке dprofiler :). - person xwlan; 22.12.2014
comment
Итак, если я пользователь, я могу обойти дерево вызовов и спросить: пожалуйста, выберите случайным образом одну выборку стека (из выбранной мной ветки) и позвольте мне ее изучить? Тогда я могу так же попросить еще несколько? Это ключ к методу случайной паузы - обходу сводок и фактическому изучению образцов, как если бы они были ошибками. (Я знаю, что пользователи могут ожидать резюме, но для того, чтобы действительно найти ускорение, вам нужно действительно изучить образцы.) - person Mike Dunlavey; 22.12.2014
comment
Откройте представление ‹history›, переместите красный ползунок, чтобы выбрать диапазон выборки, щелкните следующие строки цепочки, каждая ячейка представляет собой образец, нижний просмотр списка покажет полную трассировку стека этого образца, переместите курсор на ячейки B / F / U / Вниз, вы можете просмотреть всю историю. Чтобы избежать расширенных обсуждений в комментариях, я не буду продолжать эту ветку, извините. мы можем обсудить по электронной почте. - person xwlan; 22.12.2014