ИНСТРУМЕНТАЛЬНЫЕ СРЕДСТВА РАЗРАБОТКИ ПРОГРАММ. Инструментальные средства разработки программ
Скачать 2.85 Mb.
|
Цель Целью работы является изучение основных этапов разработки и отладки приложений в ОС Linux, а также приобретение практических навыков по использованию инструментальных средств фонда свободного программного обеспечения при компиляции исходного кода, сборке, отладке и тестировании программ, написанных на языке Си. Ход работы Запустите файловый менеджер mc и создайте в домашнем каталоге подкаталоги cvsroot, workdir и examples, в каталоге workdir создайте подкаталог project Выполните поиск во внешней памяти сервера файла testcase.c Command -> find file F6 Скопируйте файл testcase.c в каталог project под именем abcd.c и занесите в отчет исходный текст программы, предварительно сравнив его с текстом, приведенные в п.2.6. F5 С помощью редактора vi создайте в каталоге project make-файл согласно п. 2.3. Перейдем в каталог project и командой vimakefileсоздаем Выполните компиляцию программы abcd.c с помощью make-файла, используя правило abcd. При необходимости исправьте синтаксические ошибки с помощью редактора vi, информацию по ошибкам и их устранению занесите в отчет (номер строки, значение строки до устранения и после устранения ошибки, пояснения). 23-28 строка: отсутствует завершающий символ “ 55 строка: исправление предупреждения
58 строка:
После исправления: В каталоге cvsroot создайте репозиторий CVS. Т.к. CVS не знает, где находится текущий репозиторий, задаём базовый каталог cvsroot. Для этого нужно явно указывать ключом -d. Передайте каталог project и файл abcd.c в репозиторий. При выполнении команды commit с помощью редактора vi введите комментарий, например: “Пользователь pmi-b0404 передал файл abcd.c под управление CVS”. передаем каталог project в хранилище передаем файл abcd.c в хранилище добавляем комментарий Запустите исполняемый файл abcd.c и поясните результат запуска. Программа работает некорректно, так как имеются семантические ошибки. Перекомпилируйте программу с помощью правила testabcd make-файла. С помощью отладчика gdb выполните поиск и устранение семантических ошибок в программе abcd. Каждое исправление в программе должно сопровождаться записью в репозиторий новой версии с комментарием, поясняющим на русском языке сущность исправлений (например, номер строки программы abcd.c и причина исправления). После устранения всех ошибок занесите в отчет результаты тестирования программы в двух вариантах запуска – без параметра и с параметром. Команда start для запуска отладки gdb, мы видим, что программа останавливается на 51 строке. 51 строка: неправильное начальное значение match
[pmi-b0404@students project]$ cvs commit -m "Строка № 51 - неправильное начальное значение match” cvs commit: Examining . По условию, при корректной работе программы слова должны выводиться с новой строки. 23 строка: вывод с новой строки
Проверим, предварительно обновив testabcd Теперь проверим корректность работы программы с опцией -t Программа не работает. 21 строка: первая буква слова не проверяется, т.к. сначала происходит инкремент cp, а после сравнение
Программа с опцией -t работает исправно. После получения корректных результатов выполнения программы abcd с помощью редактора vi в начало отлаженной программы введите комментарий: "Программа abcd отлажена с помощью отладчика gdb дд.мм.гг. бригадой группы ПМ-ХХ в составе: ФИО1, ФИО2..." и сохраните в репозиторий финальную версию программы. Выведите список изменений файла abcd.c, выполненных в ходе отладки программы, занесите список в отчет. Пользователь pmi-b0404 передал файл abcd.c под управление CVS. 51 Неправильное начальное значение match 23 Исправлено на вывод каждого слова с новой строки 21 Проверка первого символа Финальная версия Определите размер исполняемого модуля отлаженной программы. Удалите всю отладочную информацию и снова определите размер исполняемого модуля, сравните с предыдущим результатом, результат сравнения занесите в отчет. Размер исполняемого модуля 11845 байт. Размер исполняемого файла удаление отладочной информации 6256 байта. Извлеките из репозитория полностью отлаженную программу abcd и скопируйте её в каталог examples, заменив в нем предыдущую версию программы. Все дальнейшие действия будут выполняться в этом каталоге. Выполните разбиение полностью отлаженной программы abcd на функции в соответствии с номером бригады из таблицы 3. Обратите внимание на тип функции (внутренняя или внешняя), тип файла (.c, .h или .o) и тип модуля (исходный или объектный). Занесите в отчет измененный текст программы.
Выполните сборку программы в соответствии вариантом задания, используя неявный вызов компоновщика и задав имя исполняемого файла adcd2_1; проверьте корректность работы программы и занесите в отчет результаты ее тестирования. Компиляция программы abcd2.c и формирование исполняемого модуля abcd2_1 с включением в него отладочной информации Программа работает исправно. Выполните поиск во внешней памяти сервера каталога obj, скопируйте из него все файлы в каталог example, поясните в отчете назначение скопированных файлов. crtn.o – содержит эпилог функции _init, помещаемый в конец секций .init crti.o – содержит пролог функции _init, помещаемый в начало секций .init crtbegin.o, crtend.o – обрабатывают глобальные конструкторы и деструкторы языка С++ crt1.o – содержит код, инициализирующий среду исполнения языка C и вызывающий определенную пользователем функцию main Выполните сборку программы в соответствии вариантом задания, используя явный вызов компоновщика. Результатом сборки должны быть исполняемый файл abcd2_2 и карта памяти abcd2_map; проверьте корректность работы программы и занесите в отчет результаты ее тестирования. Появилось 2 обьектных модуля: getWords.o и abcd2.o Явный вызов компоновщика: ld -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o abcd2_2 –Map= abcd2_map /usr/lib64/crt1.o /usr/lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/4.8.5/crtbegin.o abcd2.o getWords.o -lc /usr/lib/gcc/x86_64-redhat-linux/4.8.5/crtend.o /usr/lib64/crtn.o В результате получили исполняемый файл abcd2_2 и и карта памяти abcd2_map Из карты памяти abcd2_map определите размеры машинного кода модулей abcd2.o, printwords.o и getwords.o, сравните их с размерами исходного и объектного кода этих модулей (файлы типа .с и .о). Результат представьте в виде таблицы 4, все данные должны быть подтверждены скриншотами.
cat abcd2_map Добавьте в make-файл, разработанный при выполнении п.5, два новых правила, реализующие п. 16 и 18 задания. Проверьте корректность его работы. Программа работает исправно Программа работает исправно |