Программы профилирования, написанные на C или C++.

StackOverflow https://stackoverflow.com/questions/654154

  •  19-08-2019
  •  | 
  •  

Вопрос

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

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

Платформа:Линукс

Приложение должно использоваться во встроенной среде, поэтому оно должно быть легким и внешним (а не плагином для какой-либо IDE).

Это было полезно?

Решение

Я могу от души рекомендовать callgrind в сочетании с KCachegrind .

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

«gprof» в linux/freebsd — довольно простой и эффективный инструмент для определения того, какие процедуры нагружают процессор во время выполнения.Он дает как вложенный, так и плоский профиль функций.Он дает вам процент времени ЦП, затрачиваемый каждой функцией, выполняемой во время выполнения профилировщика, а также процент, занимаемый самой функцией, и процент, занимаемый ее дочерними функциями.Это поможет вам легко отделить нарушающие функции.

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

Зависит от платформы. Если вы используете MSVC, в некоторые его версии встроен профилировщик. У AMD и Intel также есть профилировщики (CodeAnalyst и VTune).

В Linux я использовал только gprof, но я знаю, что есть и другие (и я думаю, что AMD или Intel могут быть доступны и в версиях Linux)

И, конечно, весь пакет Valgrind может быть полезен. Некоторые инструменты, такие как callgrind или cachegrind, могут дать вам много информации о производительности.

Для этого есть много хороших инструментов профилирования, таких как Quantify или KCachegrind. Одна из проблем этих инструментов заключается в том, что они замедляют производительность во время выполнения, поэтому в некоторых больших системах они могут масштабироваться недостаточно хорошо.

Иногда достаточно просто запустить отладчик и нажать ctrl-c, посмотреть трассировку стека и повторить это, возможно, 4 раза.

Если вы всегда находитесь в одной и той же части кода, то вы нашли, где, вероятно, проводите большую часть времени.

Вы явно хотите две вещи:

<Ол>
  • Для профилирования вашего кода & amp; измерить его.

  • Для обнаружения областей, которые можно оптимизировать.

  • Это разные проблемы. Они не одинаковы, несмотря на то, что вам, возможно, сказали.

    Для задачи (1) будет предложено много хороших профилировщиков.

    Для задач (2) профилировщики помогают только косвенно.
    Существует гораздо более простая и обычно более эффективная техника.

    Посмотрите здесь

    Я собираюсь пойти с gprof / oprofile, если мы говорим о мире UNIX.

    Вам необходимо перекомпилировать приложение (по крайней мере, с помощью gprof).

    Gprof

    Oprofile

    Если вы работаете в Windows, я предлагаю AQTime . Поддерживает почти все компиляторы, включая .NET, Delphi и VB (и, конечно, все компиляторы C ++ (;), и это просто лучший инструмент профилирования, который я когда-либо пробовал. И это не только профилировщик производительности.

    Для измерения производительности oprofile является хорошим выбором, поскольку в Проект инструментов Linux .

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top