Профилирование может использоваться для анализа производительности
приложения.
Производительность приложения может быть измерена. Как минимум можно узнать,
сколько раз функции вызываются, сколько времени, потрачено на выполнение
этих функций, и какие функции вызываются много раз из других функций. Это
может помочь выявить функции, которые могут отъедать большую часть времени
при выполнении программы, и которые может быть стоит рассмотреть для
оптимизации.
FreeBASIC использует GPROF для анализа выполнения приложения. Информация
профилирования собирается во время выполнения программы, а GPROF
используется для анализа этой информации позднее.
Три основные шага для профилирования программы:
- 1) Подготовить программу для профилирования путем компилирования
исходника с опцией -profile.
- 2) Запустить программу для сбора информации ( сохраняется в gmon.out ).
- 3) Анализ собранной информации, используя GPROF.
Полная документация по GPROF находится здесь:
http://www.gnu.org/software/binutils/manual/gprof-2.9.1/gprof.html.
Если документация недоступна по этой ссылке, просто введите поиск в
Интернете для "GNU GPROF" и соответствующая ссылка должна быть возвращена.
FreeBASIC поддерживает функции профилирования; не
BASIC-блок
или построчное профилирование.
Подготовка программы для профилирования
Только код, скомпилированный с параметром командной строки
-profile
можно профилировать. Передайте параметр
-profile
FreeBASIC компилятору, чтобы подготовить программу для профилирования. Это
скажет компилятору на необходимость вставки специального кода в начале
исходного кода, а так же в начале каждой функции.
fbc program.bas -profile
Профилирование программы
Сбор информации, необходимой для анализа выполнения программы во время
работы программы. Запустите программу, чтобы начать сбор сведений о вызовах
функции. Эта информация автоматически сохраняется в файле с именем
gmon.out в той же директории программы.
Анализ выходных данных программы
Используйте GProf для анализа результатов. Отчет по умолчанию для GPROF
включает в себя описание значений в каждом из столбцов. Если вы не знакомы с
использованием GPROF, вы можете сначала запустить отчет по умолчанию и
прочитать описания. Выход из GPROF могут быть сохранены в файл с
перенаправлением.
Сохранение вывода из GProf в
profile.txt:
gprof program[.exe] > profile.txt
Показать только плоский отчет без описания:
gprof program[.exe] --brief --flat-profile > profile.txt
Объединение результатов для более чем одной
сессии
GPROF так же имеет опцию '--sum' для удобного объединения
результатов из нескольких сеансов выполнения. Вот пример
использования:
- Один раз запустите программу. Это создаст gmon.out.
- Используйте команду :
mv gmon.out gmon.sum
или
rename gmon.out gmon.sum.
- Снова запустите программу. Это создаст новые данные в gmon.out.
- Слияние новых данных в gmon.out в gmon.sum с помощью команды:
gprof --sum program[.exe] gmon.out gmon.sum
- Повторите два последних шага так часто, как требуется.
- Проанализируйте сводные данные, используя команду:
gprof program[.exe] gmon.sum > profile.txt
FreeBASIC профилирование изнутри
Когда опция '-profile' включена, один или несколько битов кода
добавляются в программу.
- Вызывается "_monstartup()" в начале
неявной main для инициализации профилирования
библиотеки.
- Вызывается "mcount()"
в начале каждой процедуры. При профилировании библиотеки отслеживаются
существующие функции и вложенные в них функции.
- Линковка дополнительного программного запуска объектного кода. (Например
gcrt?.o)
Сама библиотека профилирования может быть в отдельной библиотеке или частью
С
RinTime библиотеки.
- mingw потребует gcrt2.o и libgmon.a
- cygwin потребует gcrt0.o и libgmon.a
- dos потребует gcrt0.o (код профилирования в libc.a)
- linux потребует gcrt1.o (код профилирования в libc.a)
Детали могут варьироваться от одного порта FreeBASIC к другому, но исходный
код, построенный для профилирования с FreeBASIC, должен быть совместим с
другими языками, которые также поддерживают GPROF.