Чтение онлайн

на главную - закладки

Жанры

Linux: Полное руководство

Аллен Питер В.

Шрифт:

execve("./a.out", ["./а.out"], [/* 21 vars */]) = 0

uname((sys="Linux", node="localhost.localdomain", ...}) = 0

brk(0) = 0x80495b4

open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory)

open("/etc/ld.so.cache", O_RDONLY) = 7

fstat64(7, {st_mode=S_IFREG|0644, st_size=31578, ...}) = 0

old_mmap(NULL, 31578, PROT_READ, MAP_PRIVATE, 7, 0) = 0x40014000

close(7) = 0

open("/lib/i686/libc.so.6", O_RDONLY) =7

read(7, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0`u\1В4\0"..., 1024) = 1024

fstat64(7, {st_mode=S_IFREG|0755, st_size=1401027, ...}) = 0

old_mmap(0x42000000, 1264928, PROT_READ|PROT_EXEC, MAP_PRIVATE, 7, 0) = 0x42000000

mprotect(0x4212c000, 36128, PROT_NONE) = 0

old_mmap(0x4212c000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 7, 0x12c000) = 0x4212c000

old_mmap(0x42131000, 15648, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x42131000

close(7) = 0

munmap(0x40014000, 31578) = 0

brk(0) = 0x80495b4

brk(0x80495e4) = 0x80495e4

brk(0x804a000) = 0x804a000

fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0

mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40014000

write(1, "Hello\n", 6) =6

munmap(0x40014000, 4096) = 0

_exit(0) = ?

Читать

вызовы нужно так:

имя системного вызова = возвращаемое значение

В нашем случае мы вывели на консоль шесть символов, поэтому вызов write возвратит значение 6.

В случае, если системный вызов завершился неудачно (обычно код ошибки -1), программа strace выводит не только код, но и описание ошибки:

open("/foo/bar", O_RDONLY) = -1 ENOENT (No such file or directory)

Стандартные константы выводятся в их символьном представлении:

open("file.dat", O_WRONLY|O_APPEND|O_CREAT, 0666) = 3

Сигналы также выводятся в символьном представлении, например:

sigsuspend([] <unfinished ...>

– -- SIGINT (Interrupt) ---

+++ killed by SIGINT +++

Структуры, точнее члены структур, заключаются в фигурные скобки и выводятся в формате имя_члена=значение, например:

lstat("/dev/null", {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) =0

Символьные указатели печатаются как строки в С, то есть их значения заключены в двойные кавычки:

read(3, "root::0:0:System Administrator:/"..., 1024) = 422

22.5. Оптимизация программ. Профайлер gprof

Ваша программа работает медленно? Скорее всего, причина кроется в неэффективном, медленном алгоритме. Существуют программы, позволяющие определить время работы каждой функции вашей программы и всей программы в целом. Программы такого рода называются профайлерами. В вашем дистрибутиве может присутствовать один из профайлеров gprof, prof, profiler.

Сейчас мы рассмотрим программу gprof (The GNU Profiler), позволяющую определить время

работы каждой функции. Основные ключи программы представлены в таблице 22.3.

Ключи командной строки gprof Таблица 22.3

Ключ Назначение
– а He выводить информацию о статических функциях
– b Не выводить описание каждого поля в итоговой таблице
– с Включить эвристический анализ текстового сегмента объектного файла с целью создания статического графика вызовов
– e имя_функции На выводить отчет о работе указанной функции и обо всех функциях, которые из нее вызываются
– E имя функции Не обрабатывать указанную функцию и все функции, которые она вызывает
– f имя_функции выводить информацию только об указанной функции и обо всех функциях, которые из нее вызываются
– F имя_функции Обрабатывать только указанную функцию и все функции, которые из нее вызываются
– k func1 func2 Не выводить информацию о вызове функции func2 из функции func1
– s Создание итогового файла gmon.sum
– z Вывести функции с нулевым процессорным временем

22.5.1. Использование профайлера

Для использования профайлера нужно скомпилировать программу с опцией компилятора – pg и без опции – о. так как профайлер по умолчанию работает с файлом

a.out
. После этого запустите файл a
.out
, чтобы он создал файл
gmon.out
. Теперь запустите профайлер с параметром – -nograph:

$ gcc -pg 1.с

$ ./а.out

$ gprof -b –no-graph

Без ключа – b профайлер выведет описание полей итоговой таблицы:

♦ Time: время работы функции в процентном соотношении;

♦ cumulative seconds: сумма числа секунд этой функции и вызывающих ее функций;

♦ self seconds: число секунд, потраченное на работу этой функции в отдельности;

♦ Calls: число вызовов;

♦ self ms/calls: количество миллисекунд, на протяжении которых функция выполнялась;

♦ total ms/calls: количество секунд, на протяжении которых выполнялась функция и все функции, которые вызываются данной функцией;

♦ name: имя функции.

Рис. 22.5. Программа gprof

Чтобы было понятно, что означает каждое поле, рассмотрим листинг 22.3.

Листинг 22.3. Демонстрационная программа

#include <stdio.h>

int function2 {

Поделиться:
Популярные книги

Кодекс Охотника. Книга XXII

Винокуров Юрий
22. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXII

Седина в бороду, Босс… вразнос!

Трофимова Любовь
Юмор:
юмористическая проза
5.00
рейтинг книги
Седина в бороду, Босс… вразнос!

Горизонт Вечности

Вайс Александр
11. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Горизонт Вечности

Изгой Проклятого Клана. Том 5

Пламенев Владимир
5. Изгой
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Изгой Проклятого Клана. Том 5

Звездная Кровь. Экзарх I

Рокотов Алексей
1. Экзарх
Фантастика:
боевая фантастика
рпг
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Звездная Кровь. Экзарх I

Сильнейший Столп Империи. Книга 2

Ермоленков Алексей
2. Сильнейший Столп Империи
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Сильнейший Столп Империи. Книга 2

Изгой Проклятого Клана. Том 2

Пламенев Владимир
2. Изгой
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Изгой Проклятого Клана. Том 2

Третий Генерал: Тома I-II

Зот Бакалавр
1. Третий Генерал
Фантастика:
городское фэнтези
попаданцы
аниме
сказочная фантастика
5.00
рейтинг книги
Третий Генерал: Тома I-II

Бандит 2

Щепетнов Евгений Владимирович
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Бандит 2

Камень. Книга 4

Минин Станислав
4. Камень
Фантастика:
боевая фантастика
7.77
рейтинг книги
Камень. Книга 4

Первый среди равных

Бор Жорж
1. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Первый среди равных

Князь Андер Арес 2

Грехов Тимофей
2. Андер Арес
Фантастика:
рпг
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Князь Андер Арес 2

Путь к бессмертию 1

Покинтелица Евгений
1. Девятихвостый Богатырь
Фантастика:
попаданцы
сказочная фантастика
фэнтези
5.00
рейтинг книги
Путь к бессмертию 1

Лекарь Империи 6

Карелин Сергей Витальевич
6. Лекарь Империи
Фантастика:
городское фэнтези
боевая фантастика
аниме
попаданцы
5.00
рейтинг книги
Лекарь Империи 6