ГлавнаяОперационные системыLinuxКак профилировать программу C в Linux с помощью GNU gprof

Как профилировать программу C в Linux с помощью GNU gprof

ГНУПроизводительность — одна из самых больших проблем, с которыми сталкиваются программисты при разработке программного обеспечения. Именно по этой причине профилирование кода является одним из наиболее важных аспектов разработки программного обеспечения, поскольку оно позволяет выявлять узкие места, мертвый код и даже ошибки. Если вы программист, разрабатывающий приложения для Linux, вам стоит обратить внимание на профилировщик GNU «gprof».

Загрузить и установить

Gprof предустановлен в большинстве дистрибутивов Linux, но если в вашем дистрибутиве Linux это не так, вы можете загрузить и установить его с помощью менеджера пакетов командной строки, например apt-getили 10. Например, выполните следующую команду, чтобы загрузить и установить gprof в системах на базе Debian:

Contents

Загрузить и установить

apt-get install binutils

Требования

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

Использование gprof

В качестве примера рассмотрим следующую программу на языке C:

#include <stdio.h>
 
void func2()
{
   in

Требования

n>=
0; for(count=0; count   As described in the previous section, compile the code with the -pg option:   <pre class="bash">gcc -Wall -pg test.c -o test

После компиляции запустите программу:

 ./test

После успешного выполнения программа создаст файл с именем «gmon.out», содержащий информацию о профилировании, но в необработанном виде, что означает, что вы не можете открыть файл и напрямую прочитать информацию. Чтобы создать удобочитаемый файл, выполните следующую команду:

gprof test gmon

Использование gprof

output

Эта команда записывает всю информацию о профилировании в удобочитаемом формате в файл «prof_output». Обратите внимание, что вы можете изменить имя выходного файла по своему усмотрению.

Плоский профиль и график звонков

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

Например, в нашем случае это плоский профиль:

Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total           
 time   seconds   seconds    calls  ms/call  ms/call  name    
100.00      0.94     0.94      256     3.67     3.67  func2
  0.00      0.94     0.00        1     0.00   936.33  func1

Ниже приведен график вызовов:

index % time    self  children    called     name
                0.00    0.00       1/256         main [2]
                0.94    0.00     255/256         func1 [3]
[1]    100.0    0.94    0.00     256         f

Плоский профиль и график звонков

/span> -----------------------------------------------   [2] 100.0 0.00 0.94 main [2] 0.00 0.94 1/1 func1 [3] 0.00 0.00 1/256 func2 [1] ----------------------------------------------- 0.00 0.94 1/1 main [2] [3] 99.6 0.00 0.94 1 func1 [3] 0.94 0.00 255/256 func2 [1] -----------------------------------------------

Обратите внимание, что детальное объяснение этих полей присутствует в файле, содержащем информацию о профилировании (в данном случае prof_output), и генерируется каждый раз при запуске профилировщика. Чтобы отключить детали, используйте параметр командной строки -bс командой gprof.

Некоторые важные моменты

  • Чтобы правильно записать файл gmon.out, ваша программа должна завершиться нормально. Файл не создается, когда программа либо завершает работу путем вызова функции _exit(), либо аварийно завершает работу из-за необработанного сигнала.
  • Файл «gmon.out» всегда создается в текущем рабочем каталоге. Итак, убедитесь, что ваша программа имеет достаточные права для создания файла в текущем каталоге.
  • Внешний инструмент под названием gprof2dot можно использовать для преобразования графа вызовов из gprof в графическую форму.
  • Используя gprof, вы также можете создать аннотированный список исходного кода, который дает представление о том, сколько раз выполнялась каждая строка программы. Чтобы получить эту информацию, скомпилируйте программу с -g(вместе с опцией -pg, описанной ранее) и запустите команду gprofс -Aпараметр командной строки.

Некоторые важные моменты

ПОХОЖИЕ СТАТЬИ

Популярные записи