Я ищу профилировщик для использования с родным C++. Это, конечно, не обязательно должно быть бесплатным, однако при принятии решения о покупке зависит от стоимости. Это для коммерческой работы, поэтому я не могу использовать лицензионные копии для личного пользования или для учебных заведений.
Ключевые особенности, которые я ищу:
Я использовал Intel VTune и Compuware Devpartner Performance Analysis Community Edition.
VTune казался очень мощным, но у него крутая кривая обучения. Кроме того, он очень "модульный", поэтому вам нужно выяснить, какие детали вам нужно купить.
DevPartner PACE довольно прост в использовании и предоставляет все ключевые функции, однако это всего лишь 45-дневная пробная версия. Лицензионная версия (DevPartner для Visual C++ BoundsChecker Suite) стоит около 1400 долларов за место, что вполне выполнимо, но, по-моему, немного дорого.
Какие хорошие профилировщики для нативного C++ и ПОЧЕМУ?
К сожалению, этот вопрос не является точной копией. Они не заявили своих требований к профилировщику. Дальнейшее обсуждение не содержит подробностей ПОЧЕМУ. Я думаю, что запрос рекомендаций по инструменту с учетом определенных критериев делает более «ответственным»? чем просить "любимого".
@Burly: Вы приводите хороший аргумент - вы написали хороший, конкретный вопрос, и ответы не обязательно могут совпадать с теми, которые подходят для другого. Я открою заново.
Какое место занимает Visual Studio почти 8 лет спустя? Я использую встроенный профилировщик с VS 2012, и с каждым выпуском он становится все лучше и лучше. Каковы преимущества (коммерческих) конкурентов в этой области сегодня (если таковые имеются)?





В Windows GlowCode доступен по цене, довольно прост в использовании и предлагает бесплатную пробную версию, чтобы вы могли увидеть, работает ли она для вас.
Многие люди не знают, но MSFT делает большой прогресс, бесплатно предоставляя разработчикам лучшие инструменты для повышения производительности :-). Они раскрывают всем нам внутреннюю составляющую трассировки Windows: ETW.
Он является частью нового Windows SDK для server 2008 и Vista. Просто впечатляет, и его необходимо загрузить, если ваша цель - анализ производительности и профилирование под Windows (независимо от языка).
Проверьте документацию здесь, прежде чем вы решите ее скачать:
IIRC perftool - это скорее монитор производительности системы (загрузка ЦП и дисковая / сетевая загрузка), а не анализатор кода на уровне функций?
Этому не хватает точности для собственно настройки производительности нативных приложений :(
Кроме того, кажется, что он создает такие огромные дампы, что вы не можете профилировать что-либо, что работает в течение длительного периода времени. Я также использовал UIforETW (от разработчиков Chrome). Если вы просто смотрите на базовые значения, это нормально, но если вам нужно глубокое понимание, 30s быстро начнут добавлять до 12 ГБ данных.
Попробуйте Intel Parallel Studio. В настоящее время он находится в стадии бета-тестирования, но название Intel говорит само за себя.
Определенно Visual Studio Team System. Безусловно.
Только что нашел Люка StackWalker на SourceForge (http://lukestackwalker.sourceforge.net/). К сожалению, он не фокусируется на поддереве, но по-прежнему удобен в использовании, использует сервер символов (я предлагаю вам настроить его немедленно, если у вас его еще нет), предлагает графическую визуализацию, ...
Обратной стороной является то, что он не показывает накопленное время (выборки) дочерних функций.
Другая альтернатива - «Очень сонный» (http://www.codersnotes.com/sleepy). Он может показывать общее время детей, но, к сожалению, не использует сервер символов.
Последняя версия Very Sleepy может использовать сервер символов.
@CyberShadow, ты прав. Версия 0.82 действительно хороша. Не только в отношении использования сервера символов, но и в отношении функциональности «фокус на поддереве».
Если вы думаете, что 0.82 действительно хорош, подождите, пока не увидите моя собственная вилка (работа в процессе);)
Не могу дождаться, чтобы попробовать это. Спасибо.
Также стоит обратить внимание на CodeXL, он может работать как в Linux, так и в Windows, хотя он в основном посвящен отладке и профилированию OpenGL / OpenCL. В разделе профилирования есть вариант выборки по времени для процессоров, который может оказаться полезным. Это также бесплатно и работает, пока доступны файлы pdb (ну, в Windows, я не знаю, как это работает в Linux) (даже для сборок с pdb).
+1: это был единственный инструмент (среди бесплатных), который мог предоставить какие-либо значимые результаты для моего двоичного файла, встроенного в конфигурацию Release с Visual Studio Community 2017 (C++, STL, OpenCV)
Я только что закончил первую пригодную для использования версию CxxProf, переносимой ручной инструментальной библиотеки профилирования для C++.
Он соответствует вашим требованиям:
См. вики проекта для получения дополнительной информации.
Отказ от ответственности: я главный разработчик CxxProf
Я написал легкий профилировщик win32 / 64 с открытым исходным кодом, поддерживающий профилирование как процессора, так и памяти, это похоже на профилировщик VS, но с уникальной функцией, такой как график пламени процессора и данные памяти. это здесь: dprofiler
Я не голосовал против вас - я не люблю этого делать. Но ИМХО вся концепция профилирования основана на массовом самообмане в сообществе программистов и требует доработки. Проверить этот ответ.
Майк, я не уверен, проверяли ли вы код, этот профилировщик не работает как gprof (профилирование процессора), он выбирает все потоки и вычисляет веса IP-адресов, сгруппированных в дерево вызовов и т. д., Перекомпиляция кода не требуется.
Майк, мой пост может сбить вас с толку, что «похоже на профилировщик VS», мне нужно пояснить, что его пользовательский интерфейс, счетчики и т. д. Похожи на профилировщик VS, но работают по-разному. Профилировщик VS (до VS2012) выбирает только IP-адреса. dprofiler, собирая трассировки стека всех потоков, поэтому dprofiler может группировать кадры стека в дерево вызовов.
Я уверен, что вы можете создать дерево вызовов. Теперь несколько вопросов: 1) можно ли брать образцы стека во время ввода-вывода, спящего режима или других блоков процесса? 2) Можете ли вы позволить пользователю исследовать отдельные образцы стека с разрешением на уровне строк таким образом, чтобы они могли соотнести их с соответствующим кодом? Я спрашиваю, потому что в противном случае большие ускорения легко спрятать в деревьях вызовов, горячих путях или любом таком резюме, как указывает эта ссылка. Типичное возражение заключается в том, что пользователь не может исследовать достаточное количество образцов, что неверно. Если он видит проблему на 2 образцах, этого достаточно.
Q1: Да. Сэмплер периодически берет образец независимо от того, что делает целевой поток. в представлении <History> каждый образец имеет ассоциированное состояние: выполнение, спящий режим или ввод-вывод (ожидающий в ядре).
Q2: Инструмент разрешает символ в исходную строку, если есть соответствующий символ (хотя не во всех представлениях). Спасибо за ваши комментарии. Собственно, я ссылался на ваши идеи при разработке dprofiler :).
Итак, если я пользователь, я могу обойти дерево вызовов и спросить: «Пожалуйста, выберите случайным образом одну выборку стека (из выбранной мной ветки) и позвольте мне ее изучить»? Тогда я могу так же попросить еще несколько? Это ключ к методу случайной паузы - обходу сводок и фактическому изучению образцов, как если бы они были ошибками. (Я знаю, что пользователи могут ожидать резюме, но для того, чтобы действительно найти ускорение, вам нужно действительно изучить образцы.)
Откройте представление <history>, переместите красный ползунок, чтобы выбрать диапазон выборки, щелкните следующие строки потока, каждая ячейка представляет образец, нижний список показывает полную трассировку стека этого образца, переместите курсор на ячейки B / F / U / Вниз, вы можете просмотреть всю историю. Чтобы избежать расширенных обсуждений в комментариях, я не буду продолжать эту ветку, извините. мы можем обсудить по электронной почте.
: Sigh: Я искал несколько минут C++ и профилировщик, но ничего не нашел, потому что они использовали профилирование и не использовали тег профилировщика.