Подтвердить что ты не робот

Инструменты профилирования исходного кода C и С++

Возможный дубликат:
Каков ваш любимый инструмент профилирования (для С++)

Есть ли хорошие инструменты для профилирования исходного кода, который представляет собой сочетание C и С++. Каковы плюсы и минусы любого, и какие из них вы использовали и будете рекомендовать для использования. Пожалуйста, не дайте мне список инструментов из Google. Я тоже могу это сделать, я хочу использовать личный опыт того, кто использовал эти инструменты, и знает о плюсах и минусах. Спасибо заранее.

4b9b3361

Ответ 1

Я обнаружил, что gprof является лучшим профилировщиком CPU hotspot, а инструменты эффективности Google - лучшим профилировщиком пробоотбора. Оба работают для C и C++.

На мой взгляд, в Windows нет хороших инструментов для профилирования.

GNU gprof плюсы и минусы

  • Только GCC
  • Работает с C и C++
  • Только обрабатывает время CPU и код внутри двоичного файла, вам нужно все, что вы хотите профилировать, статически связанное в
  • Очень точно
  • Добавляет небольшие накладные расходы для выполнения

Преимущества и недостатки Google Performance Tools

  • Я думаю, что это требует цепочки инструментов GNU
  • Иногда не удается идентифицировать символы
  • Очень настраиваемый
  • Выводит на большое количество форматов, включая формат Callgrind, и автоматически загружает KCacheGrind для вас
  • Имеет различные инструменты профилирования памяти
  • Профилировщик выборки с минимальными накладными расходами

Связанные полезные вопросы и ответы

Ответ 2

Вы можете использовать Callgrind для создания профилирующего вывода. Это часть Valgrind. Вызов Callgrind можно использовать с KCacheGrind, что, вероятно, стоит посмотреть, пока вы используете Linux.

Ответ 3

Я бы с уважением не согласился с Мэттом.

Инструмент, который я использую все время в Windows, метод случайной паузы, и он работает со всеми языками, поддерживаемыми IDE.

В качестве примера использования этой функции для настройки производительности этот случай показывает, как ускорение в 43 раза было достигнуто с помощью нескольких этапов.

В Gprof есть много проблем, перечисленных здесь, и, согласно руководству google-perftools, некоторые из тех же проблем повторяются там, такие как процедуры отчетности, а не строки, подчеркивая само локальное время, подчеркивая график и т.д. (я не могу сказать из документа, если он выборочно блокируется.)

Поскольку системы программного обеспечения становятся все больше, самоопределение становится все менее актуальным. Счетчик программ проводит большую часть своего времени в библиотечных программах или блокируется в системе. Графики становятся гигантскими гнездами. Люди спрашивают: "Я знаю, что функция X стоит дорого, но где функция X является проблемой?" Более того, "узкие места" становятся все больше и больше, потому что стек становится глубже в среднем, и каждый уровень стека представляет собой новую возможность делать больше вызовов функций, чем необходимо.

Пример счётчика стека, который сообщает процент за строкой, а также выборок во время блокировки, и позволяет пользователю контролировать выборку, чтобы не разбавлять образец, установленный во время ввода пользователя, Увеличить.

РЕДАКТОР: Извините, вы не можете оставить достаточно одного. Вот новое объяснение:

Как работают программы, они прослеживают дерево вызовов, которое очень похоже на дубовое дерево вне моего окна. У этого есть ствол (основной), который разрастает ветки (сайты звонков), которые прорастают дальнейшие ветки на несколько уровней до листьев (инструкций) и желудей (блокирующих вызовов).

Когда деревенский хирург приходит к тому, чтобы обрезать (оптимизировать) его, смотрит ли он только там, где листья (горячие точки)? Он игнорирует желуди (без образцов во время блокировки)? Нет, он ищет ветки (сайты звонков), которые являются тяжелыми (в стеке много) и нездоровыми (ненужными). Это то, что он делает. То, что делает случайная пауза и Zoom, помогает найти эти сайты вызовов.

Ответ 4

AMD CodeAnalyst довольно неплохо. Это также кросс-платформа, которая хороша, когда вы обнаруживаете узкое место на платформе.