Как использовать callgrind для профилирования только определенного периода выполнения программы? - PullRequest
18 голосов
/ 08 марта 2010

Я хочу использовать valgrind для некоторого профилирования, поскольку для этого не нужно пересобирать программу.(программа, которую я хочу профилировать, уже собрана с «-g»)

Но valgrind (callgrind) работает довольно медленно ... вот что я должен сделать:

  1. startсервер (я хочу профилировать этот сервер)
  2. вид подключения к этому серверу
  3. перед выполнением какой-либо операции на сервере, начните собирать данные профиля
  4. после завершения операцииготово, конец сбора данных профиля
  5. анализ данных профилирования.

Я могу сделать это с помощью Sun Studio на Solaris (используя dbx). Я просто хочу знать,можно ли сделать то же самое, используя valgrind (callgrind)?

Спасибо

Ответы [ 3 ]

33 голосов
/ 21 июля 2010

Вам следует посмотреть документацию по callgrind и прочитать о callgrind_control.

  1. Запустите ваше приложение: valgrind --tool=callgrind --instr-atstart=no your_server.x
  2. См. 1.
  3. начать сбор данных профиля : callgrind_control -i on
  4. конец сбора данных профиля : callgrind_control -i off
  5. Анализ данных с kcachegrind или callgrind_annotate / cg_annotate
10 голосов
/ 26 января 2016

Для профилирования только некоторых функций вы также можете найти полезные CALLGRIND_START_INSTRUMENTATION и CALLGRIND_STOP_INSTRUMENTATION из <valgrind/callgrind.h> заголовка и использовать опцию callgrind --instr-atstart=no, как предложено в Ответ Судного дня .

4 голосов
/ 08 марта 2010

Вы не говорите, что OS - я предполагаю, Linux - в этом случае вы можете посмотреть на oprofile (бесплатно) или Zoom (не бесплатно, но вы можете получить пробную лицензию) оба являются профилировщиками выборки и могут профилировать существующий код без повторной компиляции. Zoom намного приятнее и проще в использовании (у него есть графический интерфейс и некоторые приятные дополнительные функции), но у вас, вероятно, уже есть oprofile в вашей системе.

...