Профилятор gprof: Компиляция программы для профилирования

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

2. Компиляция программы для профилирования

Первым шагом для порождения профильной информации о вашей программе является ее компилирование и сборка (линковка) с разрешенным профилированием.

При компиляции исходного файла для профилирования, укажите опцию `-pg' компилятору. (Эта опция должна быть добавлена к другим опциям, которые вы обычно используете).

При сборке (линковке) программы для профилирования, если вы пользуетесь компилятором типа `cc', который обеспечивает сборку, просто укажите `-pg' вдобавок к вашим обычным опциям. Эта опция, `-pg', изменит и компиляцию, и сборку так, как необходимо для профилирования. Например:

         cc -g -c myprog.c utils.c -pg
         cc -o myprog myprog.o utils.o -pg
Опция `-pg' также сработает и с командой, которая выполняет сразу и компиляцию, и сборку:

         cc -o myprog myprog.c utils.c -g -pg
Если вы запускаете сборщик (линкер) `ld' непосредственно, а не через компилятор типа `cc', то вы должны указать профилирующий начальный файл `/lib/gcrt0.o' как первый входной файл вместо обычного начального файла `/lib/crt0.o'. Вдобавок, вам, возможно, захочется указать профилирующую библиотеку Си `/usr/lib/libc_p.a', задав опцию `-lc_p' вместо обычной `-lc'. Это не является абсолютно необходимым, однако позволяет вам получить информацию о количестве вызовов функций стандартной библиотеки, таких как `read' или `open'. Например:

         ld -o myprog /lib/gcrt0.o myprog.o utils.o -lc_p
Если вы компилируете только некоторые модули программы с `-pg', вы еще сможете профилировать программу, но вы не получите полной информации о модулях, которые были откомпилированы без `-pg'. Все, что вы узнаете о функциях в этих модулях, это общее время, затраченное на их выполнение; вы не узнаете, сколько раз они были вызваны или откуда. Это не повлияет на простой профиль (за исключением поля `вызовы', которое для таких функций останется пустым), но заметно уменьшит полезность графа вызовов.


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