- Lektsia - бесплатные рефераты, доклады, курсовые работы, контрольные и дипломы для студентов - https://lektsia.info -

УКАЗАНИЯ К ЛАБОРАТОРНОЙ РАБОТЕ



Система для разработчиков в GNU Linunx обеспечивает полный набор средств (компиляторы Си, утилита make, программы отладки, система CVS и др.) для разработки приложений.

Поддерживаются следующие основные этапы разработки приложений:

· создание исходного кода (текста) программы;

· сохранение различных вариантов исходного текста;

· компиляция исходного текста и построение исполняемого мо-дуля;

· тестирование и отладка;

· сохранение всех изменений, выполняемых при тестировании и отладке.

Созданный исходный текст программы представляется в виде файла. Файл, содержащий исходный текст, может быть получен с помощью любого текстового редактора, например, vi. Использование суффикса ".с" для имени файла с программой на языке Си отражает удобное и полезное соглашение, принятое в ОС LINUX (например: abcd.c).

СИСТЕМА КОНТРОЛЯ ВЕРСИЙ

CVS (Concurrent Versions System) — программный продукт, относящийся к разряду Система управления версиями (Version Control System). Хранит историю изменений определенного набора файлов, как правило, текстовых, например исходного кода программ, и облегчает совместную работу группы людей (часто – программистов) над одним проектом. CVS популярна в мире открытого ПО. Система распространяется на условиях лицензии GNU GPL.

Система управления версиями (Version Control System или Revision Control System) – ПО для облегчения работы с изменяющейся информацией. Система управления версиями позволяет хранить несколько версий одного и того же документа, при необходимости возвращаться к более ранним версиям, определять, кто и когда сделал то или иное изменение, и многое другое.

Такие системы наиболее широко применяются при разработке программного обеспечения, для хранения исходных кодов разрабатываемой программы. Однако они могут с успехом применяться и в других областях, в которых ведется работа с большим количеством непрерывно изменяющихся электронных документов

Программное обеспечение Википедии ведет историю изменений для всех ее статей, используя методы, аналогичные тем, которые применяются в системах управления версиями.

В течение разработки сложной программы часто желательно отслеживать изменения исходного кода (кто, когда и какова причина изменений). В дополнение, если более чем один человек работает над проектом программы, важно, чтобы два и более программиста не делали изменений кода в одно и то же время.

ОС Linux имеет систему управления версиями CVS (Concurrent Versions System), которая является инструментом, обеспечивающим решение этих задач.

Все тексты хранятся в специальной системе каталогов CVS, которая называется репозиторием (хранилищем). Репозиторий создается средствами системы CVS (команда init):

$ cvs –d /home/brigades/pmXXXX/cvsroot init

В каталоге /home/brigades/pmXXXX/cvsroot будет создано хранилище.

Рабочий каталог необходим для хранения текущей (отлаживаемой) версии исходной программы. Он не должен находиться в одном каталоге с репозиторием. Так как программный проект обычно включает несколько файлов, то для каждого программного проекта необходимо создать свою директорию.

Упрощенная схема системы работы CVS включает следующие основные шаги:

1) создание хранилища (репозитория);

2) создание рабочего каталога и размещение в нем отлаживаемой программы (текущей версии);

3) передача текущей версии исходного файла под управление системе CVS.

Отладка и изменение в исходном файле должны выполняться в рабочем каталоге. После внесения изменений текущая версия должна передаваться в хранилище с соответствующим комментарием. После передачи в хранилище соответствующий проект может или должен быть удален из рабочей директории, и в случае необходимости исходный файл может быть извлечен в рабочую директорию.

Пример работы с CVS

Исходные данные:

· /home/brigades/pmXXXX – домашний каталог;

· отлаживаемый файл file.c – не содержит синтаксических ошибок.

1) Создание хранилища:

а) в домашнем каталоге создаем директорию cvsroot;

б) в директории cvsroot создаем хранилище:

$ cvs –d /home/brigades/pmXXXX/cvsroot init

Хранилище создано.

2) Создание рабочего каталога:

а) в домашнем каталоге создаем директорию с именем workDIR;

б) в директории workDIR создаем каталог hello, в котором будут находиться необходимые нам файлы, в том числе там должен быть файл file.c;

в) в директорию hello запишем файл file.c.

3) Связывания рабочей директории с хранилищем; для этого, находясь в рабочей директории workDIR, выполним команду

$ cvs –d /home/brigades/pmXXXX/cvsroot checkout –l .

4) Передача проекта (каталога hello) и файла file.c в хранилище.

Для этого необходимо выполнить следующие команды:

а) $ cvs –d /home/brigades/pmXXXX/cvsroot add hello

б) $ cvs –d /home/brigades/pmXXXX/cvsroot add hello/file.c

в) $ cvs –d /home/brigades/pmXXXX/cvsroot commit

При выполнении команды commit вызывается редактор для ввода комментария (пояснения). Например: «Пользователь pmXXXX передал файл file.c впервые под управление CVS». После ввода пояснения выполняются стандартные действия: ESC -> : -> wq. Далее после извлечения и записи новой версии файла необходимо использовать только команду commit (команду add использовать не надо, так как там уже есть директория hello и файл file.c). В хранилище файл имеет вид (file.c,v), где v – названия версий.

5) Работа в рабочем каталоге (отладка файла file.c).

а) получаем исполняемый код (компилятор gcc);

б) исполняемый код запускаем на выполнение. Если работает, то переходим на шаг 6;

в) получаем исполняемый код для отладчика (gcc с ключом g);

г) запускаем отладчик. Находим ошибку и выходим из отладчика;

д) запускаем vi и исправляем ошибку;

е) исправленную версию записываем в хранилище;

ж) переходим в пункт "а".

6) обзор исправлений в программе file.c

$ cvs –d ~/cvsroot rdiff –r 1.1 .

КОМПИЛЯЦИЯ ИСХОДНОГО ТЕКСТА
И ПОСТРОЕНИЕ ИСПОЛНЯЕМОГО ФАЙЛА

Основное назначение компилятора с языка Си (в GNU Linux) заключается в компиляции всей программы в целом и получении исполняемого модуля.

Одно из полезных свойств компилятора Си – его способность по суффиксам определять типы файлов. По суффиксу ".c" компилятор распознает, что файл abcd.c должен компилироваться, а по суффиксу ".o", что файл abcd.о является объектным модулем и для получения исполняемой программы необходимо выполнить редактирование связей. Простейший пример командной строки для компиляции программы abcd.c и построения исполняемого модуля abcd имеет вид

$ cc -o abcd abcd.c

При разработке большой программы, состоящей из нескольких исходных файлов заголовков, приходится постоянно следить за файлами, которые требуют перекомпиляции после внесения изменений. Программа make освобождает пользователя от такой рутинной работы и служит для документирования взаимосвязей между файлами. Описание взаимосвязей и соответствующих действий хранится в так называемом make-файле, который по умолчанию имеет имя makefile или Makefile. Например, makefile для программы abcd.c мог бы иметь вид:

#

# Makefile for abcd.c

#

# Compile abcd.c normaly

abcd:abcd.c

cc -o abcd abcd.c

# Compile abcd.c be using debugging

testabcd:abcd.c

cc -o testabcd -g abcd.c

# End Makefile for abcd.c

В общем случае make-файл содержит последовательность записей (строк), определяющих зависимости между файлами. Первая строка записи представляет собой список целевых (зависимых) файлов, разделенных пробелами, за которыми следует двоеточие и список файлов, от которых зависят целевые.

Текст, следующий за точкой с запятой, и все последующие строки, начинающиеся с литеры табуляции, являются командами OC Linux, которые необходимо выполнить для обновления целевого файла. Таким образом, спецификация взаимосвязей имеет формат:

target1 [ target2...]: [:] [dependment1...] [;commands]

[#commentary][(tab)commands][#commentary],

где # специфицирует начало комментария, так как содержимое строки, начиная с # и до конца строки, не будет обрабатываться командой make;

: – последовательность команд ОС Unix должна содержаться в одной строке make-файла (файла описаний), есть возможность переноса команд (\), но она считается как одна строка;

:: – последовательность команд ОС Unix может содержаться в нескольких последовательных строках файла описаний.

Приведенный выше make-файл для программы abcd.c включает два способа компиляции и построения исполняемого модуля.

Первый способ предусматривает обычную компиляцию с построением исполняемого модуля с именем abcd. Второй способ позволяет включать в исполняемый модуль testabcd возможность выполнить процесс отладки на уровне исходного текста.

ТЕСТИРОВАНИЕ И ОТЛАДКА

Тестирование и отладка следуют за устранением всех синтаксических ошибок, выявленных при компиляции. Для отладки могут быть использованы различные программы отладки на уровне исходного кода. В качестве примера такой программы рассмотрена программа gdb. Для ее использования необходимо выполнить команду (для нашего примера) $ make testabcd, которая создаст исполняемый код (файл testabcd) для отладки.

После этого запустить отладчик gdb командой:

$ gdb testabcd

На экране появится информация об отладчике и в последней строке приглашение программы gdb в виде:

(gdb) для ввода команд отладчику.

Основными командами отладчика gdb являются:

backtrace – выводит весь путь к текущей точке останова, т. е. названия всех функций, начиная от main(); иными словами, выводит весь стек функций;

break параметр– устанавливает точку останова, параметром может быть номер строки или название функции;

continue – продолжает выполнение программы от текущей точки до конца;

display– добавляет выражение в список выражений, значения которых отображаются каждый раз при остановке программы;

finish – выполняет программу до выхода из текущей функции; отображает возвращаемое значение, если такое имеется;

help [команда] –информация о команде или общая информация об использовании отладчика gdb;

list – пролистывает 10 строк вниз, начиная с текущей;

next – пошаговое выполнение программы, но, в отличие от команды step, не выполняет пошагово вызываемые функции;

print выражение– выводит значение какого-либо выражения;

run – запускает программу на выполнение;

step – пошаговое выполнение программы;

quit – выход из отладчика.

ТЕСТОВЫЙ ПРИМЕР ДЛЯ ЛАБОРАТОРНОЙ РАБОТЫ

При выполнении лабораторной работы будет использоваться программа abcd.c на языке Си, исходный текст которой приведен ниже. Эта программа представляет собой простейший лексический анализатор, который читает входной текст со стандартного ввода (клавиатуры) и результаты печатает на стандартный вывод (экран).

Для каждой строки, принятой со стандартного ввода, программа печатает на стандартный вывод слова по одному в строку.

Словом является последовательность алфавитно-цифровых символов, заключенная между пробелами. Если задан в качестве аргумента некоторый символ (например -t), то на стандартный вывод из вво-димой строки печатаются только слова, которые включают данный символ.

Приведенный ниже текст программыabcd.c содержит целый ряд ошибок как синтаксических, так и семантических. Предполагается, что при выполнении лабораторной работы студенты должны отыскать и исправить эти ошибки и тем самым приобрести практические навыки по использованию таких инструментальных средств, как CVS, gdb, gcc, make.

В качестве тестового примера при выполнении лабораторной работы будем использовать строку: