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

методичка-1

.pdf
Скачиваний:
11
Добавлен:
28.03.2015
Размер:
309.92 Кб
Скачать

лы clean, install и uninstall, позволяющие очищать информацию, не-

нужную после создания программы, устанавливать программу в сис-

тему и отменять установку программы соответственно. Приведем пример Makefile для Linux:

HelloWorld: foo.o main.o

g++ foo.o main.o -o HelloWorld foo.o: foo.cpp foo.h

g++ -c foo.cpp main.o: main.cpp foo.h

g++ -c main.cpp clean:

rm -f HelloWorld foo.o main.o install:

cp HelloWorld /usr/local/bin/HW uninstall:

rm -f /usr/local/bin/HW

Имеющийся Makefile позволяет выполнять следующие коман-

ды:

собрать из исходных файлов программу;

make

удалить информацию ненужную после сборки программы. В

правиле clean стоит команда rm, удаляющая исполняемый и объект-

ные файлы. Флаг -f означает, что, если удаляемый файл отсутствует,

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

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

make clean

установить программу в систему. Правило install помещает исполняемый файл в каталог /usr/local/bin – стандартный каталог раз-

13

мещения пользовательских программ. После этого её можно вызы-

вать набором имени (HelloWorld);

make install

отменить установку программы.

make uninstall

Следует учесть что выполнение установки и обратной её опера-

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

su root

make install

exit

14

4. Отладчик gdb

Программа отладчик используется для исправления ошибок пропущенных программистом и компилятором или исправление ко-

торых невозможно в момент написания кода программы и компиля-

ции. Входящий в комплект программ GNU отладчик называется

GDB. Версия для ОС Windows поставляется отдельно от набора

MinGW и требует дополнительной установки.

Для того, чтобы пользоваться отладчиком, нужно сначала ском-

пилировать программу так, чтобы её двоичный файл содержал отла-

дочную информацию. Эта информация включает в себя, в частности,

описание соответствий между адресами исполняемого кода и строка-

ми в исходном коде.

Такая компиляция достигается путём добавления флага -g, на-

пример:

g++ main.cpp foo.cpp -o HelloWorld -g

Если используется команда make, то необходимо поставить оп-

цию CFLAGS=-g. В этом случае все команды на компиляцию, содер-

жащиеся в Make-файле, автоматически получат флаг -g.

make CFLAGS=-g

Другой способ добавить отладочную информацию исправить

Makefile добавив ко всем строкам отвечающим за компиляцию опцию

-g.

При запуске отладчика указывается файл для отладки.

gdb ./HelloWorld

Приведем пояснения к основным командам управления отлад-

чиком. Запуск программы внутри отладчика, производится после за-

пуска отладчика командой run.

run

После этой команды начинается выполнение программы до пер-

15

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

вых строк главного файла программы используется команда list.

list

Для указания конкретных строк, например с третьей строки по шестую файла main.cpp используется команда

list 4,6

или

list main.cpp:4,6

Таким же образом можно посмотреть содержимое других ис-

ходных файлов, например:

list foo.h:1,6

Для установки точки останова (breakpoint) используется команда break. Например, установка точки останова в файле main.cpp в седь-

мой строке производится командами:

list main.cpp:1,9

break 7

Выполнение первой команды делает активным файл main.cpp и

позволяет просмотреть строки в которых будет установлена точка ос-

танова. Вторая команда непосредственно создает точку останова.

Кроме того, для указания точки останова можно использовать назва-

ние функции, перед входом в которую требуется установить точку останова.

Осуществить просмотр установленных точек останова произво-

дится командой info breakpoints.

info breakpoints

После запуска программы и остановки на точки останова, можно узнать где именно произошла остановка, для этого используется ко-

манда backtrace.

16

backtrace

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

Для просмотра значения любой переменной используется ко-

манда print.

print message

Для отображения значения конкретной переменной на каждой точке остановки, используется команда display.

display message

Продолжение выполнения программы после останова произво-

дится командой continue.

continue

Выполнение команды run после точки останова, приведет к пе-

резапуску выполнения программы.

Для изменения значения во время выполнения используется ко-

манда set.

set message=0x000000

Осторожно! message это указатель на класс, его обнуление при-

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

зателю приведена исключительно для первокурсников с целью нау-

чить их экспериментировать и не боятся нарушать правила в преде-

лах разумного.

Удаление точек останова производится командой delete с поряд-

ковым номером точки останова.

delete 1

Команда удаляет первую точку останова.

Для пошагового выполнения программы используется команда

17

step. Её также можно вызывать одной буквой s. Для её использования необходимо установить точку останова и запустить программу ко-

мандой run, после остановки выполнения на точки останова вводится команда step.

step

или

s

Если требуется пошаговое выполнение программы в пределах одной функции, используется команда next.

next

или

n

Если после входа в функцию необходимо прекратить пошаговое выполнение в её пределах, используется команда finish.

finish

Таким образом можно покинуть продолжительную функцию,

если отладка не затрагивает её содержимое.

Список наиболее часто встречающихся команд отладчика при-

веден в приложении 2.

18

5. Средства обеспечения переносимости и распространения

Makefile

На сегодняшний момент существует множество UNIX-

подобных ОС и линейка ОС Windows. Для переносимости программ между ними возникает необходимость корректировать Makefile. При-

веденный в предыдущем разделе Makefile для Linux не может быть корректно выполнен в Windows. Решение этой проблемы возможно с помощью скрипта или утилиты configure, входящей в состав инстру-

ментов, называемых GNU Autotools. Аналог такой возможности в средах быстрой разработки автору не известен.

Вкачестве утилиты configure чаще используется в ОС Windows,

вОС Linux configure реализуется как скрипт. В этом случае пользова-

телю поставляются исходные файлы программы на языке програм-

мирования и скрипт configure, выполнение которого приводит к соз-

данию Makefile. Следует учесть что при работе в Windows, набор ин-

струментов Autotools устанавливается отдельно от набора MinGW.

Последовательность действий пользователя заключается в выполне-

нии команды:

./configure

Далее, выполняется работа с обычным Makefile.

make

make install

make clean

Для получения конфигурационного скрипта удалите из папки все файлы, кроме файлов с исходным текстом. Создайте два тексто-

вых файла Makefile.am и configure.ac. Содержимое файла

Makefile.am:

bin_PROGRAMS=HelloWorld.exe

HelloWorld_SOURCES=foo.h foo.cpp main.cpp

19

Значения записей:

bin_PROGRAMS=HelloWorld.exe - название конечного испол-

няемого файла.

HelloWorld_SOURCES=foo.h foo.cpp main.cpp - указывает на все исходные файлы, участвующие в сборке программы.

Содержимое файла configure.ac:

AC_INIT(main.cpp)

AM_INIT_AUTOMAKE(HelloWorld,0.1)

AC_PROG_CC

AC_PROG_CXX

AC_PROG_INSTALL

AC_OUTPUT(Makefile)

Скрипт configure.ac всегда начинается директивой AC_INIT и

заканчиваться AC_OUTPUT. Значение команд.

AC_INIT(main.cpp) - инициализация скрипта. В качестве пара-

метра передаётся название любого из исходных файлов. Проверяет,

находится ли в данном каталоге такой файл и, если находится, счита-

ет текущий каталог рабочим. AM_INIT_AUTOMAKE(HelloWorld,0.1) - указывает, что будет

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

AC_PROG_CC и AC_PROG_CXX - указывают, каким синтакси-

сом и с применением каких библиотек написана программа. Необхо-

димы для выбора соответствующего компилятора. Если программа написана на C++ и использует стандартную библиотеку C++, выбира-

ется директива AC_PROG_CXX. Если на С, выбирается

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

20

AC_PROG_INSTALL - указывает, что в make-файле необходимо сформировать цель install, чтобы пользователь мог командой make install установить программу в системный каталог.

AC_OUTPUT - завершает скрипт и указывает, что конечный файл должен называться Makefile.

Дальше все операции будут рассматриваться применительно к ОС Linux, однако они имеют минимальные отличия от действий вы-

полняемых для ОС Windows.

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

aclocal

autoconf

touch README AUTHORS NEWS ChangeLog

automake -a

./configure

make

Разберём введеные команды:

aclocal сканирует файл configure.ac и, в зависимости от его ди-

ректив, формирует макросы, предназначенные для autoconf и automake; эти макросы сохраняются в файле aclocal.m4;

autoconf формирует скрипт configure в зависимости от содержи-

мого configure.ac;

automake формирует скрипт Makefile.in в зависимости от содер-

жимого Makefile.am; в дальнейшем пользователь, запустив configure,

сформирует Makefile на основании Makefile.in. Флаг -a означает, что,

если программа не найдёт в каталоге проекта файлов install-sh, missing, INSTALL, COPYING, depcomp, она автоматически создаёт их. Наличие этих файлов обязательно в соответствии с их стандартым набором в GNU программе. В случае их отсутствия automake не смо-

жет выполниться. Для их создания используется команда touch

21

NEWS README AUTHORS ChangeLog, которая меняет время моди-

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

Распространение исполняемых файлов происходит в виде дист-

рибутивов, создать который можно следующей командой:

make dist

Обратите внимание, Makefile созданный автоматически содер-

жит разделы, которые ранее не упоминались, например, dist. Благода-

ря этому разделу и появляется возможность создать дистрибутив. В

результате должен появиться файл HelloWorld-0.1.tar.gz.

После этой операции программа полностью готова к распро-

странению.

Для установки полученного дистрибутива необходимо выпол-

нить следующие действия:

разархивировать дистрибутив gunzip kalkul-0.1.tar.gz tar xf kalkul-0.1.tar

перейти в каталог с дистрибутивом cd HelloWorld-0.1

сформировать makefile

./configure

собрать программу make

установить её в системный каталог su root

make install exit

очистить разархивированный каталог от ненужных файлов make clean

Чтобы удалить программу выполните команды:

22