Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
calldata prog.с -- *5 prog.с main 64 188 calls prog.с -- *19 prog.с main 54На машине одного из авторов этой книги предыдущий вывод был сгенерирован в каталоге с исходными файлами приложения с помощью команды
$ <b>cxref *.с *.h</b>но точный синтаксис зависит от версии. См. документацию к вашей системе и интерактивное справочное руководство для получения дополнительной информации о том, включена ли программа
cxrefПрограмма
cflowcflowДалее приведен пример вывода, полученный версией
cflow 0 file_ungetc {prcc.c 997}1 main {prcc.c 70}2 getopt {}3 show_all_lists {prcc.c 1070}4 display_list {prcc.c 1056}5 printf {}6 exit {}7 exit {}9 usage {prcc.c 59}10 fprintf {}11 exit {}Пример информирует о том, что функция
mainshow_all_listsshow_all_listsdisplay_listprintfУ этой версии
cflow-icflow19 display_list {prcc.c 1056}20 show_all_lists {prcc.c 1070}21 exit {}22 main {prcc.c 70}23 show_all_lists {prcc.c 1070}24 usage {prcc.c 59}25 ...74 printf {}75 display_list {prcc.c 1056}76 maketag {prcc.c 4 87}77 show_all_lists {prcc.c 1070}78 main {prcc.c 70}79 ...99 usage {prcc.c 59}100 main {prcc.c 70}В примере показано, что функцию
exitmainshow_all_listsusageВыполнение профилирования с помощью prof/gprof
Методика, зачастую полезная при попытках выяснить проблемы снижения производительности программы, называется профилированием выполнения (execution profiling). Профиль программы, обычно поддерживаемый специальными опциями компилятора и вспомогательными программами, показывает, где программа тратит время.
Программа
profgprof-pprof-pggprof$ <b>cc -pg -о program program.с</b>Программа компонуется со специальной библиотекой С, и в нее включается контрольный код. В конкретных системах он может отличаться, но общая цель — такая организация программы, которая позволяет часто прерывать выполнение и записывать этап выполнения. Контрольные данные записываются в файл mon.out (gmon.out для
gprof$ <b>./program</b>$ <b>ls -ls</b>2 -rw-r--r-- 1 neil users 1294 Feb 4 11:48 gmon.outПрограмма prof/gprof читает эти контрольные данные и выводит отчет. См. подробности, касающиеся опций программы, в интерактивном справочном руководстве. Далее в качестве примера приведен вывод (сокращенный) программы gprof.
cumulative self self total time seconds seconds calls ms/call ms/call name 18.5 0.10 0.10 8664 0.01 0.03 doscan [4] 18.5 0.20 0.10 mcount (60) 14.8 0.28 0.08 43320 0.00 0.00 _number [5] 9.3 0.33 0.05 8664 0.01 0.01 _format_arg [6] 7.4 0.37 0.04 112632 0.00 0.00 _ungetc [8] 7.4 0.41 0.04 8757 0.00 0.00 _memccpy [9] 7.4 0.45 0.04 1 40.00 390.02 _main [2] 3.7 0.47 0.02 53 0.38 0.38 _read [12] 3.7 0.49 0.02 w4str [10] 1.9 0.50 0.01 26034 0.00 0.00 _strlen [16] 1.9 0.51 0.01 8664 0.00 0.00 strncmp [17]Проверки соблюдения условий
Несмотря на то, что вставка на этапе разработки программы с помощью условной компиляции отладочного кода, такого как вызовы
printf
