Это команда sprof, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.
ПРОГРАММА:
ИМЯ
sprof - чтение и отображение данных профилирования общих объектов
СИНТАКСИС
спроф [вариант] ... общий-объект-путь [путь к данным профиля]
ОПИСАНИЕ
The спроф команда отображает сводку профилирования для общего объекта (разделяемой библиотеки)
указан в качестве первого аргумента командной строки. Сводка профилирования создается с использованием
ранее созданные данные профилирования во втором (необязательном) аргументе командной строки. Если
путь к данным профилирования опущен, тогда спроф попытается вывести его, используя
soname разделяемого объекта, ищем файл с именем .профиль в
Текущий каталог.
ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ
Следующие параметры командной строки определяют вывод профиля, который необходимо создать:
-c, - пары вызовов
Распечатайте список пар путей вызовов для интерфейсов, экспортируемых общим
объект, а также количество раз использования каждого пути.
-p, --плоский профиль
Создайте плоский профиль всех функций в контролируемом объекте с
подсчеты и клещи.
-q, --граф
Сгенерируйте график звонков.
Если ни один из вышеперечисленных параметров не указан, то по умолчанию отображается плоский
профиль и график звонков.
Доступны следующие дополнительные параметры командной строки:
-?, --Помогите
Отобразите сводку параметров и аргументов командной строки и завершите работу.
--использование
Отобразите короткое сообщение об использовании и выйдите.
-V, --версия
Отобразите версию программы и выйдите.
СООТВЕТСТВИЕ К
The спроф Команда является расширением GNU, которого нет в POSIX.1.
ПРИМЕР
Следующий пример демонстрирует использование спроф. Пример состоит из основного
программа, которая вызывает две функции в общем объекте. Сначала код основной программы:
$ кошка прог.с
#включают
void x1 (недействительно);
void x2 (недействительно);
Int
main (int argc, char * argv [])
{
x1 ();
x2 ();
выход (EXIT_SUCCESS);
}
Функции x1 () и x2 () определены в следующем исходном файле, который используется для
построить общий объект:
$ кошка libdemo.c
#включают
аннулировать
потреблятьCpu1 (int lim)
{
интервал j;
для (j = 0; j <lim; j ++)
getppid ();
}
аннулировать
x1 (void) {
интервал j;
для (j = 0; j <100; j ++)
потреблятьCpu1(200000);
}
аннулировать
потреблятьCpu2 (int lim)
{
интервал j;
для (j = 0; j <lim; j ++)
getppid ();
}
аннулировать
x2 (недействительно)
{
интервал j;
для (j = 0; j <1000; j ++)
потреблятьCpu2(10000);
}
Теперь мы создаем общий объект с настоящим именем libdemo.so.1.0.1, и soname
libdemo.so.1:
$ cc -g -fPIC -общий -Wl, -soname, libdemo.so.1 \
-o libdemo.so.1.0.1 libdemo.c
Затем мы создаем символические ссылки для имени библиотеки и имени компоновщика библиотеки:
$ ln -sf libdemo.so.1.0.1 libdemo.so.1
$ ln -sf libdemo.so.1 libdemo.so
Затем мы компилируем основную программу, связываем ее с общим объектом, а затем перечисляем
динамические зависимости программы:
$ cc -g -o прог прог.с -Л. -ldemo
$ LDD прог
linux-vdso.so.1 => (0x00007fff86d66000)
libdemo.so.1 => не найдено
libc.so.6 => /lib64/libc.so.6 (0x00007fd4dc138000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd4dc51f000)
Чтобы получить информацию о профилировании для общего объекта, мы определяем среду
переменная LD_ПРОФИЛЬ с именем библиотеки:
$ экспорт LD_PROFILE = libdemo.so.1
Затем мы определяем переменную среды LD_PROFILE_OUTPUT с именем пути
каталог, в который должны быть записаны выходные данные профиля, и создайте этот каталог, если он не
уже существуют:
$ экспорт LD_PROFILE_OUTPUT = $ (pwd) / prof_data
$ MkDir -p $ LD_PROFILE_OUTPUT
LD_ПРОФИЛЬ приводит к тому, что вывод профилирования прилагается в выходной файл, если он уже существует,
поэтому мы гарантируем, что ранее не существовало данных профилирования:
$ rm -f $ LD_PROFILE_OUTPUT / $ LD_PROFILE.profile
Затем мы запускаем программу для создания выходных данных профилирования, которые записываются в файл в папке
каталог, указанный в LD_PROFILE_OUTPUT:
$ LD_LIBRARY_PATH =. ./прог
$ ls prof_data
libdemo.so.1.profile
Затем мы используем спроф -p возможность создания плоского профиля со счетчиками и отметками:
$ спроф -p libdemo.so.1 $ LD_PROFILE_OUTPUT / libdemo.so.1.profile
Плоский профиль:
Каждая выборка считается 0.01 секунды.
% кумулятивной собственной суммы
время секунды секунды звонит нам / звоните нам / звоните имя
60.00 0.06 0.06 100 600.00 Потребление ЦП1
40.00 0.10 0.04 1000 40.00 Потребление ЦП2
0.00 0.10 0.00 1 0.00 х1
0.00 0.10 0.00 1 0.00 х2
The спроф -q опция генерирует график звонков:
$ спроф -q libdemo.so.1 $ LD_PROFILE_OUTPUT / libdemo.so.1.profile
index% раз, когда дети называют себя именем
0.00 0.00 100/100 x1 [1]
[0] 100.0 0.00 0.00 100 потреблять ЦП1 [0]
-----------------------------------------------
0.00 0.00 1/1
[1] 0.0 0.00 0.00 1 x1 [1]
0.00 0.00 100/100 потребленияCpu1 [0]
-----------------------------------------------
0.00 0.00 1000/1000 x2 [3]
[2] 0.0 0.00 0.00 1000 потреблять ЦП2 [2]
-----------------------------------------------
0.00 0.00 1/1
[3] 0.0 0.00 0.00 1 x2 [3]
0.00 0.00 1000/1000 потребленияCpu2 [2]
-----------------------------------------------
Вверху и внизу значок " "строки представляют собой идентификаторы, которые не входят в
профилированный объект (в данном примере это экземпляры Основной ()).
The спроф -c опция генерирует список пар вызовов и количество их вхождений:
$ спроф -c libdemo.so.1 $ LD_PROFILE_OUTPUT / libdemo.so.1.profile
х1 1
x1 потреблениеCpu1 100
х2 1
x2 потреблениеCpu2 1000
Используйте sprof онлайн с помощью сервисов onworks.net