
- •Список сокращений
- •Введение
- •Маршрут разработки программ
- •Компилятор gnu gcc Toolchain
- •Компиляция одного файла
- •Компиляция нескольких файлов
- •Автоматизация сборки
- •Отладка программы
- •Принципы взаимодействия программ и ос
- •Системные вызовы
- •Библиотечные вызовы
- •Запуск и завершение процесса
- •Работа со строками
- •Системные вызовы для работы с файлами и потоками
- •Работа с файлами
- •Работа с потоками ввода-вывода
- •Библиотечные вызовы для работы с файлами и потоками
- •Работа с файлами
- •Работа с потоками ввода-вывода
- •Работа с директориями
- •Упражнения
- •Индивидуальные задания
- •Контрольные вопросы
- •Список литературы
Отладка программы
Помимо процесса компиляции программ немалый интерес для разработчика представляют средства отладки. Они позволяют отслеживать поведение программы и состояние внутренних переменных. В GNU Toolchain средством отладки является GNU Debugger (GDB) [ CITATION Fre221 \l 1033 ]. Он предлагает широкие возможности для исследования поведения программы, включая просмотр значений внутренних переменных и ручного вызова функций программы.
Для получения возможности отладки программы при ее компиляции должен быть задан атрибут «-g»:
gcc -g main.c –o prg |
Отладчик GDB может быть вызван в командной оболочке с помощью ввода команды
gdb prg |
После вызова отладчика терминал перейдет в интерактивный режим ввода команд gdb и программа prg будет доступна для запуска и отладки. В Таблице Таблица 1 представлены некоторые из доступных команд GDB.
Таблица 1. Примеры команд GDB
№ |
Команда |
Описание |
|
gdb program |
запустить отладку программы program |
|
gdb --args program arg0 … argN |
запустить отладку программы program с аргументами arg0 … argN |
|
run –v |
запустить выполнение отлаживаемой программы с параметром –v |
|
start |
запустить программу в пошаговом режиме |
|
list |
вывести следующие 10 строк программы с номерами |
|
list - |
вывести предыдущие 10 строк программы с номерами |
|
next / n |
выполнить один шаг программы |
|
continue / c |
запустить программу после остановки |
|
info args |
вывести аргументы функции |
|
info locals |
вывести локальные аргументы функции |
|
print var / p var |
вывести значение переменной var |
|
break function |
поставить точку останова на функции function |
|
break N |
поставить точку останова на строчке N |
|
quit |
выйти из GDB |
|
help |
полный перечень команд |
По завершению отладки программы для выхода из gdb необходимо ввести команду «quit».
Принципы взаимодействия программ и ос
Системные вызовы
Системный вызов (system calls, syscalls) – это единый механизм взаимодействия между пользовательской программой и ядром ОС Linux. С помощью системных вызовов каждый процесс может получить доступ к той части, которая контролируется ОС: запуску и остановки процессов, файловой системе, интерфейсом обмена данными, аппаратному обеспечению и т. д.
Для разработчика программы каждый системный вызов представляет собой функцию на языке C. Однако при вызове этой функции ее фактический код исполняется не в вызвавшей ее программе, а в системных библиотеках на уровне ядра ОС, после чего она возвращает в программу результат своей работы. Для использования системных вызовов необходимо подключение соответствующих заголовочных файлов «.h», в которых они объявлены.
В ОС Linux существует более 200 системных вызовов [ CITATION sys22 \l 1033 ], которые могут быть сгруппированы в 5 категорий:
управление процессами;
работа с файлами;
управление устройствами;
работа с информацией;
связь и коммуникации.
Для просмотра перечня используемых программой системных вызовов в командной оболочке существует утилита «strace». После ввода команды
strace prg |
на экране будут отображены все системные вызовы, которые используются программой «prg».