Какие хорошие профилировщики для нативного 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++

: Sigh: Я искал несколько минут C++ и профилировщик, но ничего не нашел, потому что они использовали профилирование и не использовали тег профилировщика.

Zach Burlingame 30.09.2008 19:41

К сожалению, этот вопрос не является точной копией. Они не заявили своих требований к профилировщику. Дальнейшее обсуждение не содержит подробностей ПОЧЕМУ. Я думаю, что запрос рекомендаций по инструменту с учетом определенных критериев делает более «ответственным»? чем просить "любимого".

Zach Burlingame 30.09.2008 19:43

@Burly: Вы приводите хороший аргумент - вы написали хороший, конкретный вопрос, и ответы не обязательно могут совпадать с теми, которые подходят для другого. Я открою заново.

Shog9 30.09.2008 20:00

Какое место занимает Visual Studio почти 8 лет спустя? Я использую встроенный профилировщик с VS 2012, и с каждым выпуском он становится все лучше и лучше. Каковы преимущества (коммерческих) конкурентов в этой области сегодня (если таковые имеются)?

IInspectable 17.05.2016 00:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
17
4
15 735
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Ответ принят как подходящий

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

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

perftools

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

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

msdn doc

IIRC perftool - это скорее монитор производительности системы (загрузка ЦП и дисковая / сетевая загрузка), а не анализатор кода на уровне функций?

Martin Beckett 08.02.2010 19:11

Этому не хватает точности для собственно настройки производительности нативных приложений :(

kfsone 29.08.2018 06:56

Кроме того, кажется, что он создает такие огромные дампы, что вы не можете профилировать что-либо, что работает в течение длительного периода времени. Я также использовал UIforETW (от разработчиков Chrome). Если вы просто смотрите на базовые значения, это нормально, но если вам нужно глубокое понимание, 30s быстро начнут добавлять до 12 ГБ данных.

kfsone 29.08.2018 06:58

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

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

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

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

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

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

Последняя версия Very Sleepy может использовать сервер символов.

Vladimir Panteleev 11.08.2013 11:44

@CyberShadow, ты прав. Версия 0.82 действительно хороша. Не только в отношении использования сервера символов, но и в отношении функциональности «фокус на поддереве».

Patrick 02.09.2013 14:05

Если вы думаете, что 0.82 действительно хорош, подождите, пока не увидите моя собственная вилка (работа в процессе);)

Vladimir Panteleev 02.09.2013 17:34

Не могу дождаться, чтобы попробовать это. Спасибо.

Patrick 02.09.2013 20:08

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

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

AntonK 30.07.2017 01:25

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

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

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

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

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

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

Я не голосовал против вас - я не люблю этого делать. Но ИМХО вся концепция профилирования основана на массовом самообмане в сообществе программистов и требует доработки. Проверить этот ответ.

Mike Dunlavey 21.12.2014 21:52

Майк, я не уверен, проверяли ли вы код, этот профилировщик не работает как gprof (профилирование процессора), он выбирает все потоки и вычисляет веса IP-адресов, сгруппированных в дерево вызовов и т. д., Перекомпиляция кода не требуется.

xwlan 22.12.2014 06:26

Майк, мой пост может сбить вас с толку, что «похоже на профилировщик VS», мне нужно пояснить, что его пользовательский интерфейс, счетчики и т. д. Похожи на профилировщик VS, но работают по-разному. Профилировщик VS (до VS2012) выбирает только IP-адреса. dprofiler, собирая трассировки стека всех потоков, поэтому dprofiler может группировать кадры стека в дерево вызовов.

xwlan 22.12.2014 06:48

Я уверен, что вы можете создать дерево вызовов. Теперь несколько вопросов: 1) можно ли брать образцы стека во время ввода-вывода, спящего режима или других блоков процесса? 2) Можете ли вы позволить пользователю исследовать отдельные образцы стека с разрешением на уровне строк таким образом, чтобы они могли соотнести их с соответствующим кодом? Я спрашиваю, потому что в противном случае большие ускорения легко спрятать в деревьях вызовов, горячих путях или любом таком резюме, как указывает эта ссылка. Типичное возражение заключается в том, что пользователь не может исследовать достаточное количество образцов, что неверно. Если он видит проблему на 2 образцах, этого достаточно.

Mike Dunlavey 22.12.2014 15:42

Q1: Да. Сэмплер периодически берет образец независимо от того, что делает целевой поток. в представлении <History> каждый образец имеет ассоциированное состояние: выполнение, спящий режим или ввод-вывод (ожидающий в ядре).

xwlan 22.12.2014 17:28

Q2: Инструмент разрешает символ в исходную строку, если есть соответствующий символ (хотя не во всех представлениях). Спасибо за ваши комментарии. Собственно, я ссылался на ваши идеи при разработке dprofiler :).

xwlan 22.12.2014 17:31

Итак, если я пользователь, я могу обойти дерево вызовов и спросить: «Пожалуйста, выберите случайным образом одну выборку стека (из выбранной мной ветки) и позвольте мне ее изучить»? Тогда я могу так же попросить еще несколько? Это ключ к методу случайной паузы - обходу сводок и фактическому изучению образцов, как если бы они были ошибками. (Я знаю, что пользователи могут ожидать резюме, но для того, чтобы действительно найти ускорение, вам нужно действительно изучить образцы.)

Mike Dunlavey 22.12.2014 17:53

Откройте представление <history>, переместите красный ползунок, чтобы выбрать диапазон выборки, щелкните следующие строки потока, каждая ячейка представляет образец, нижний список показывает полную трассировку стека этого образца, переместите курсор на ячейки B / F / U / Вниз, вы можете просмотреть всю историю. Чтобы избежать расширенных обсуждений в комментариях, я не буду продолжать эту ветку, извините. мы можем обсудить по электронной почте.

xwlan 22.12.2014 18:16

Другие вопросы по теме