Я ищу библиотеку C / C ++ с возможностями профилирования, такими как gprof
, или же callgrind
,
Точнее, я хочу, чтобы его вывод был эквивалентен тому, что callgrind
выдаст, чтобы передать его сторонним инструментам, таким как KCacheGrind.
Идея состоит в том, чтобы иметь возможность спроектировать аспект на основе этой библиотеки и включить его в несколько приложений, которые мы разрабатываем в моей команде.
Профилировщик процессора от 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
Других решений пока нет …