Добавил:
github.com Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
9
Добавлен:
30.09.2023
Размер:
144.97 Кб
Скачать
    1. Отладка программы

Помимо процесса компиляции программ немалый интерес для разработчика представляют средства отладки. Они позволяют отслеживать поведение программы и состояние внутренних переменных. В 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».

  1. Принципы взаимодействия программ и ос

    1. Системные вызовы

Системный вызов (system calls, syscalls) – это единый механизм взаимодействия между пользовательской программой и ядром ОС Linux. С помощью системных вызовов каждый процесс может получить доступ к той части, которая контролируется ОС: запуску и остановки процессов, файловой системе, интерфейсом обмена данными, аппаратному обеспечению и т. д.

Для разработчика программы каждый системный вызов представляет собой функцию на языке C. Однако при вызове этой функции ее фактический код исполняется не в вызвавшей ее программе, а в системных библиотеках на уровне ядра ОС, после чего она возвращает в программу результат своей работы. Для использования системных вызовов необходимо подключение соответствующих заголовочных файлов «.h», в которых они объявлены.

В ОС Linux существует более 200 системных вызовов [ CITATION sys22 \l 1033 ], которые могут быть сгруппированы в 5 категорий:

  • управление процессами;

  • работа с файлами;

  • управление устройствами;

  • работа с информацией;

  • связь и коммуникации.

Для просмотра перечня используемых программой системных вызовов в командной оболочке существует утилита «strace». После ввода команды

strace prg

на экране будут отображены все системные вызовы, которые используются программой «prg».

Соседние файлы в папке OS_labs