Профилятор gprof: Для чего нужно профилирование

Вперед Назад Содержание

1. Для чего нужно профилирование

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

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

Профилирование состоит из нескольких шагов:

  • Вы должны скомпилировать и собрать (слинковать) вашу программу с разрешенным профилированием. *См. Компиляция::.
  • Вы должны исполнить вашу программу для порождения файла данных о профиле. *См. Исполнение::.
  • Вы должны запустить `gprof' для анализа данных о профиле. *См. Запуск::.
Следующие три раздела объясняют эти шаги более детально.

Результатом анализа является файл, содержащий две таблицы - "Простой профиль" ("flat profile") и "Граф вызовов" ("call graph") (плюс замечания, кратко объясняющие содержимое этих таблиц).

Простой (flat) профиль показывает, сколько времени потратила ваша программа на исполнение каждой функции и сколько раз эта функция вызывалась. Если вам надо просто узнать, какие функции требуют большинства времени, то это устанавливается именно отсюда. *См. Простой профиль::.

Граф вызовов показывает, для каждой функции, какие функции ее вызывали, какие функции вызывала она сама и сколько раз. Также здесь показано, сколько времени было затрачено на выполнение подпрограмм в каждой функции. Это может подсказать вам места, в которых вы можете попытаться исключить вызовы функций, требующих достаточно много времени на выполнение. *См. Граф вызовов::.


Вперед Назад Содержание