Linux: Полное руководство
Шрифт:
Читать
В нашем случае мы вывели на консоль шесть символов, поэтому вызов write возвратит значение 6.
В случае, если системный вызов завершился неудачно (обычно код ошибки -1), программа strace выводит не только код, но и описание ошибки:
Стандартные константы выводятся в их символьном представлении:
Сигналы также выводятся в символьном представлении, например:
Структуры, точнее члены структур, заключаются в фигурные скобки и выводятся в формате имя_члена=значение, например:
Символьные указатели печатаются как строки в С, то есть их значения заключены в двойные кавычки:
22.5. Оптимизация программ. Профайлер gprof
Ваша программа работает медленно? Скорее всего, причина кроется в неэффективном, медленном алгоритме. Существуют программы, позволяющие определить время работы каждой функции вашей программы и всей программы в целом. Программы такого рода называются профайлерами. В вашем дистрибутиве может присутствовать один из профайлеров gprof, prof, profiler.
Сейчас мы рассмотрим программу gprof (The GNU Profiler), позволяющую определить время
Ключи командной строки gprof Таблица 22.3
Ключ | Назначение |
---|---|
– а | He выводить информацию о статических функциях |
– b | Не выводить описание каждого поля в итоговой таблице |
– с | Включить эвристический анализ текстового сегмента объектного файла с целью создания статического графика вызовов |
– e имя_функции | На выводить отчет о работе указанной функции и обо всех функциях, которые из нее вызываются |
– E имя функции | Не обрабатывать указанную функцию и все функции, которые она вызывает |
– f имя_функции | выводить информацию только об указанной функции и обо всех функциях, которые из нее вызываются |
– F имя_функции | Обрабатывать только указанную функцию и все функции, которые из нее вызываются |
– k func1 func2 | Не выводить информацию о вызове функции func2 из функции func1 |
– s | Создание итогового файла gmon.sum |
– z | Вывести функции с нулевым процессорным временем |
22.5.1. Использование профайлера
Для использования профайлера нужно скомпилировать программу с опцией компилятора – pg и без опции – о. так как профайлер по умолчанию работает с файлом
Без ключа – b профайлер выведет описание полей итоговой таблицы:
♦ Time: время работы функции в процентном соотношении;
♦ cumulative seconds: сумма числа секунд этой функции и вызывающих ее функций;
♦ self seconds: число секунд, потраченное на работу этой функции в отдельности;
♦ Calls: число вызовов;
♦ self ms/calls: количество миллисекунд, на протяжении которых функция выполнялась;
♦ total ms/calls: количество секунд, на протяжении которых выполнялась функция и все функции, которые вызываются данной функцией;
♦ name: имя функции.
Рис. 22.5. Программа gprof
Чтобы было понятно, что означает каждое поле, рассмотрим листинг 22.3.
Листинг 22.3. Демонстрационная программа