Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
9
Добавлен:
25.02.2016
Размер:
181.55 Кб
Скачать

Министерство образования Республики Беларусь

Белорусский Национальный Технический Университет

Факультет информационных технологий и робототехники

Кафедра «Программное обеспечение вычислительной техники

и автоматизированных систем»

Отчёт

по лабораторной работе № 2

по дисциплине «Операционные системы»

тема: «Компиляция и отладка приложений в Linux»

Исполнитель:

студент группы 10702112

Сидоров А.О.

Преподаватель:

Радкевич А.С.

2013-2014 учебный год

ЛАБОРАТОРНАЯ РАБОТА № 2

КОМПИЛЯЦИЯ И ОТЛАДКА ПРИЛОЖЕНИЙ В LINUX

Цель работы

Изучить инструментарий разработки приложений для Linux и фундаментальные основы системного программирования с использованием утилит gcc (g++) и gdb для создания, компиляции и отладки приложений на языке программирования С/C++.

Требования

  1. Разработать приложение согласно варианту бригады. Во всех программах необходимо ввести N-строк, используя два способа ввода: через аргументы командной строки и стандартного ввода данных во время работы программы. Запустить программу в режиме отладки и продемонстрировать знания основных команд gdb.

  2. При разработки программы использовать модульный принцип.

  3. Во время работы программы должны выводить на экран исходные и конечные данные.

  4. При выполнении задания запрещается использовать интегрированные средства разработки (Integrated Development Environment, IDE). Рекомендуется задействовать любой текстовый редактор (к примеру, gedit) и набор компиляторов GNU Compiler Collection (GCC), в частности, компилятор языка программирования С/C++ gcc/g++.

  5. При разработке программ придерживайтесь соглашений по написанию кода на C/C++ (Code-Convention).

Индивидуальное задание:

Найти слово, состоящее только из различных символов. Если таких слов несколько, найти первое из них.

Ход выполнения лабораторной работы:

  1. Установил соответствующий инструментарий для выполнения лабораторной работы (gcc, g++ и gdb).

  2. Для удобства навигации по файлам установил дополнительно файловый менеджер GNOME Comander.

  3. В текстовом редакторе gedit набрал исходный код решения задания на языке программирования С++ и сохранил исходник с именем. Программа состоит из следующих файлов (см. рис. 1):

    • functions.h файл заголовка, в котором описаны прототипы функций разделения строки на слова, и поиск первого слова, состоящего из различных символов.

    • functions.cc файл реализации функций;

    • test.cc файл, в котором описана главная функция программы main;

  1. Запустил терминал Linux и с помощью команды cd перешёл в папку местонахождения исходных кодов программы.

  2. Для компиляции программы использовал компилятор g++ с вводом соответствующих параметров (см. рис. 1);

  3. Для тестирования работоспособности запустил программу с соответствующими аргументами командной строки (см. рис. 1).

  4. Для отладки программы использовал gdb (см. рис. 2).

Результаты выполнения лабораторной работы:

Рисунок 1 — Компиляция и выполнение программы test

Рисунок 2 — Запуск и отладка программы test с использованием gdb

Что я освоил в процессе выполнения лабораторной работы:

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

  2. Базовые основы разработки программ на языке программирования С/С++.

  3. Изучил некоторые команды (ls, cd, clear, man, info, ...) для работы в Linux-терминале.

  4. Научился компилировать и запускать C/C++ программы с использованием gcc и g++ компиляторов.

  5. Научился отлаживать работу программы с использованием встроенного отладчика gdb.

  6. Разобрался в процессе создания компилятором выполняемой программы, а также как воедино собрать проект, который написан с использованием модульного принципа.

Выводы:

  1. Процесс создания исполняемой программы включает в себя четыри стадии:

    • написание исходного кода прогарммы (получаем файлы *.h, *.с / *.сс);

    • обработка исходного кода программы препроцессором;

    • компиляция преобразованного исходного файла препроцессором в набор машинных команд (результат сохраняется в объектных файлах с расширением *.o);

    • компоновка (или линковка);

  1. Для быстрого запуска Linux-терминала используеться следующее сочетание клавиш на клавиатуре: «Alt»+«Ctrl»+«T».

  2. GCC (GNU Compiler Collection) – набор компиляторов для различных языков программирования, разработанный в рамках проекта GNU. GCC используется как стандартный компилятор для свободных UNIX-подобных операционных систем.

  3. GNU Debugger — переносимый отладчик проекта GNU, который работает на многих UNIX-подобных системах и умеет производить отладку многих языков программирования, включая Си, C и др. В ходе выполнения лабораторной работы были изучены такие команды GNU GDB, как :

  • break – установка точки останова, а delete – удаляет точку останова;

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

  • list – просмотр исходного кода;

  • info breakpoints – просмотр всех точек останова;

  • print – показывает чему равно на данном этапе значение переменной;

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

  • clear – удаляет все точки останова на текущем уровне стека (то есть в текущей функции);

  • continue – продолжение выполнения программы

  • set – прямо во время выполнения программы изменяет значение переменной;

  • step - проходим программу, останавливаясь на каждой строчке;

  • next - при вызове функции, программа не входит в неё, а продолжает дальше выполняться только на текущем уровне стека;

  • finish - выполняет программу до выхода из текущей функции;

  1. g++ традиционное обозначение GNU C++, свободно распространяемого компилятора языка C++. Является частью GCC – коллекции компиляторов GNU.

ПРИЛОЖЕНИЕ A

Листинг исходного кода программы

Файл functions.h

#ifndef function_H

#define function_H

int poisk(char *s);

int l(char *s,char str[]);

#endif

Файл functions.cc

#include <string.h>

#include <stdio.h>

#include <iostream>

#include "function.h"

using namespace std;

int poisk(char *s){

int cnt=0,f;

for(int i=0;i<strlen(s);i++){

f=1;

for(int j=0;j<strlen(s);j++){

if(i!=j&&s[i]==s[j])

f=0;

}

if(f)

++cnt;

}

return cnt;

}

int l(char *s,char str[])

{

int m=1;

s=strtok(str," ,.!?()");

while(s){

if (poisk(s)==strlen(s)&&m==1){

m=0;

cout<<"Slovo:";

puts(s);

}

s=strtok(NULL," ,.!?()");

}

return 0;

}

Файл test.cc

#include <stdio.h>

#include <iostream>

#include "function.h"

using namespace std;

int main(int size,char **argv)

{

char str[100],*sp;

if(size>1){

l(*argv,argv[1]);

}else{

cout<<"\nString: ";

fgets(str,255,stdin);

l(sp,str);

}

return 0;

}

Соседние файлы в папке Сидоров А.О