Профилирующая библиотека, эквивалентная gprof / callgrind

Я ищу библиотеку C / C ++ с возможностями профилирования, такими как gprof, или же callgrind,

Точнее, я хочу, чтобы его вывод был эквивалентен тому, что callgrind выдаст, чтобы передать его сторонним инструментам, таким как KCacheGrind.

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

3

Решение

Профилировщик процессора от gperftools могут быть присоединены к произвольным исполняемым файлам, используя LD_PRELOAD или типичная динамическая связь. Он может выводить данные в формате, совместимом с callgrind.

Давайте предположим, что вы хотите профилировать исполняемый файл a.out, Начните, связав это с -lprofiler, Затем запустите его с CPUPROFILE окр. переменная, указывающая на имя файла, в котором будут храниться данные профилирования. Данные в формате callgrind могут быть получены с использованием pprof,

CPUPROFILE=a.out.prof ./a.out
pprof --callgrind a.out a.out.prof

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

Если по какой-либо причине вы не можете изменить способ связывания исполняемого файла, вы все равно можете профилировать его, определяя LD_PRELOAD следующим образом.

LD_PRELOAD=/path/to/libprofiler.so CPUPROFILE=a.out.prof ./a.out
3

Другие решения

Других решений пока нет …