Дана лабораторна спрямована на установку середовища для подальшої роботі з предмету "Програмування". Тому, ніякий код писати не треба та завдання одне на всіх.
Дії, що необхідно виконати:
- Зареєструватися (якщо треба) на однієї з загально-доступних систем (рекомендовано), таких як gitlab, github та створити там приватний репозиторій за допомогою веб інтерфейсу проекту. Репозиторій повинен мати наступну назву: programing-FNAME, де:
- programing – Назва курсу (програмування);
- FNAME – транслітероване прізвище студента, відповідно до правил згідно з постановою КМУ 2010р. Наприклад, Прізвище Давидов трансформується до Davydov. Таким чином, назва репозиторію буде "programing-davydov". Дії при наявності двох студентів з однаковим прізвищем оговорюються з викладачем окремо.
За умовчуванням, репозиторій публічний, тобто всі мають доступ до нього. Для того, щоб уникнути умисного витоку вашої інтелектуальної власності (коду, звіту, тощо), необхідно:
- зробити ваш репозиторій приватним;
- додати вашого викладача у співавтори, щоб він мав змогу перевіряти ваш репозиторій.
-
Склонуватися з створеного репозиторія
-
Створити наступні каталоги в своєму репозиторію:
lab02
,lab02/src
. Таким чином, у вашому проекті повинні бути наступні елементи:
└── lab02
└── src
Скопіювати наступні елементи:
- файл
.clang-format
з проектаsample_project
до кореня вашого репозиторія - файл
.clang-tidy
з проектаsample_project
до кореня вашого репозиторія - файл
.gitlab-ci.yml
з проектаsample_project
до кореня вашого репозиторія - файл
Doxyfile
з каталогуlab00
проектаsample_project
до каталогуlab02
вашого репозиторія - файл
Makefile
з каталогуlab00
проектаsample_project
до каталогуlab02
вашого репозиторія - файл
README.md
з каталогуlab00
проектаsample_project
до каталогуlab02
вашого репозиторія - каталог
src
з каталогуlab00
проектаsample_project
до каталогуlab02
вашого репозиторія
Таким чином, у вашому проекті повинні бути наступні елементи:
├── .clang-format
├── .clang-tidy
├── .gitlab-ci.yml
├── README.md
└── lab02
├── Doxyfile
├── Makefile
├── README.md
└── src
├── lib.c
├── lib.h
└── main.c
- Зафіксувати зміни (за допомогою команди git commit) під назвою "Initial copy of sample_project". Зверніть увагу,
- при виконанні будь-яких git операцій, потрібно знаходитись в каталозі вашого проекта;
- необхідно дослідити роботу команди git commit, та внести текст повідомлення у рамках цієї ж команди;
- перед безпоседенім виконанням команди git commit необхідно додати файли до git індексу. Для цього необхідно дослідити команду git add
- Виконати зміни на розсуд викладача, зібрати проект (зкомпілувати) та продемонструвати зміни. За умовчуванням зміни рекомендується виконувати наступні:
- на оцінку "задовільно" - всі ті ж зміни, що буди зроблені у коді у попередній роботі;
- на оцінку "добре" та "відмінно" - додати новій тип Тварини "Людина", зробити так, щоб він був у списку елементів, що виводиться на екран.
- Відкрити в відлагоднику (debugger) lldb ваш виконуючий файл, зупинитися на будь-якій строці та визначити значення змінних (variables). Слід поекспериментувати з можливостями відлагодника "Step in", "Step over", "Step out". Посилання на офіційну документацію по роботі з додатком. В 90% випадків система команд ідентична до його "батька" gdb, тому рекомендується ознайомитись з його документацією з початку (див. інші посилання у розділі 04 посилань).
- Зафіксувати зміни за допомогою команди git commit.
- Дослідити режими компіляції з інформацією про відлагодження та без неї; описати різницю.
- Написати звіт о ході виконання роботи та отриманих результатах. Звіт не повинен мати зображення!
- Завантажити зміни за допомогою команди git push. На поточний час, структура репозиторію, що завантажується на видалений сервер, повинна виглядати наступним чином:
├── .git
├── .gitignore
├── .clang-format
├── .clang-tidy
├── .gitlab-ci.yml
├── README.md
├── lab01
│ └── doc
│ └── lab01.txt
└── lab02
├── Doxyfile
├── Makefile
├── README.md
├── doc
│ └── lab02.txt
└── src
├── lib.c
├── lib.h
└── main.c
Пояснення до структури:
- .gitignore - файл з переліком елементів, що не повинні бути добавлені до системи контролю версіями. До цього переліку належать бінарники та згенеровані файли. Створюється один раз та лежить у корені проекту;
- .clang-format - файл коректного форматування коду;
- .clang-tidy - файл коректної стилістики коду;
- README.md файл загального присвячення всієї дисципліни. Файл повинен мати інформацію про дисципліну та автора роботи;
- lab02/Doxyfile - файл конфігурації документування коду;
- lab02/README.md файл загального присвячення лабораторної роботи. У рамках курсу повинен мати у собі ПІБ автора, номер лабораторної роботи, назву л/р, та завдання до л/р. Створюється для кожної лабораторної роботи;
- lab02/dist - директорія з згенерованими даними. Не повинна бути в системі контролю версіями (та повинна бути додана до файлу .gitignore). Складається з скомпільованих бінарних файлів та doxygen документації (див. інформацію про файл Doxyfile);
Зверніть увагу на наявність звіту для лабораторної роботи 1.
Правила оформлення звіту для цієї лабораторної роботи співпадає з правилами оформлення звіту попередньої л/р
- Транслітерація: http://translit.kh.ua/#lat/passport
- Робота з debugger
- LLDB Tutorial (official): https://lldb.llvm.org/use/tutorial.html
- Сайт GNU GDB: https://www.gnu.org/software/gdb/documentation/
- http://sourceware.org/gdb/current/onlinedocs/gdb.pdf
- http://www.gdbtutorial.com/tutorial/how-use-gdb-example
- https://www.cprogramming.com/gdb.html
- https://www.recurse.com/blog/5-learning-c-with-gdb
- https://habr.com/ru/post/181738/
- Робота з git
- Git Book (Official): https://git-scm.com/book/ru/v2
- .gitignore: http://gitignore.io
- Що таке процес відлагодження (debug)?
- Чим відрізняється бінарний файл з та без інформацією про відлагодження?
- Які базові утиліти необхідні для можливості відлагодження додатків?
- Для чого необхідна утиліта lldb?
- Як дізнатися поточне значення змінної у відлагоднику?
- Що таке точка зупинки (breakpoint)? Як її поставити?
- Що таке стек виклику? Як його подивитися?
- Що роблять наступні команди: Step In, Step Out, Step Over?