ПОС/Лаб 4 2016 — разлика између измена
м (→Задатак 2) |
м (-spoiler) |
||
(Није приказано 9 међуизмена 3 корисника) | |||
Ред 1: | Ред 1: | ||
{{tocright}} | {{tocright}} | ||
Лаб 4 се појављује у '''шестом''' термину вежби. | |||
== Група 3 == | == Група 3 == | ||
=== Задатак 1 === | === Задатак 1 === | ||
==== Поставка ==== | ==== Поставка ==== | ||
( | '''(6п)''' У фајл ''test/project/makefile'' уписати правила за превођење кода датог у фолдерима ''src'' и ''include''. | ||
У фолдеру ''obj'' треба се нађу сви ''.о'' фајлови, | У фолдеру ''obj'' треба се нађу сви ''.о'' фајлови, | ||
У ''project'' фолдеру треба да се налази извршни фајл под називом ''program''. | У ''project'' фолдеру треба да се налази извршни фајл под називом ''program''. | ||
Ред 11: | Ред 11: | ||
Користити променљиве, ''$@'', ''$<'', ''$^'' и ''patsubst'' где год има смисла. | Користити променљиве, ''$@'', ''$<'', ''$^'' и ''patsubst'' где год има смисла. | ||
( | '''(4п)''' У ''makefile'' додати акције ''clean'' и ''all''. | ||
''clean'' треба да брише све фајлове који нису ''.c'' или ''.h'' или ''makefile'' (потребно је уклонити и скривене фајлове који имају ''~'' на крају, а које генерише едитор) | ''clean'' треба да брише све фајлове који нису ''.c'' или ''.h'' или ''makefile'' (потребно је уклонити и скривене фајлове који имају ''~'' на крају, а које генерише едитор) | ||
''all'' треба да уради поновно формирање свих зависних фајлова без обзира да ли су ажурирани или не | ''all'' треба да уради поновно формирање свих зависних фајлова без обзира да ли су ажурирани или не | ||
Ред 19: | Ред 19: | ||
==== Решење ==== | ==== Решење ==== | ||
Једно од решења које има максимални број бодова: | Једно од решења које има максимални број бодова: | ||
<syntaxhighlight lang="makefile | <syntaxhighlight lang="makefile"> | ||
# makefile | # makefile | ||
Ред 40: | Ред 40: | ||
$(SRCDIR)/%.d: $(SRCDIR)/%.c | $(SRCDIR)/%.d: $(SRCDIR)/%.c | ||
$(CC) -MM $< $(CFLAGS) > $@ | $(CC) -MM -MT $(OBJDIR)/%.o $< $(CFLAGS) > $@ | ||
include $(DEP) | include $(DEP) | ||
Ред 59: | Ред 59: | ||
=== Задатак 2 === | === Задатак 2 === | ||
( | ==== Поставка ==== | ||
'''(4п)''' Користећи ''gdb'', написати следеће команде у фајл ''test/gdb/gdb.txt'': | |||
# Створити извршни програм од кода датог у фолдерима ''src'' и ''include'' | # Створити извршни програм од кода датог у фолдерима ''src'' и ''include'' | ||
# Поставити бреакпоинт на линију 14 у ''main.c'' фајлу <syntaxhighlight lang="c">a = dohvFibonaciBrojeve(n);</syntaxhighlight> | # Поставити бреакпоинт на линију 14 у ''main.c'' фајлу <syntaxhighlight lang="c" inline>a = dohvFibonaciBrojeve(n);</syntaxhighlight> | ||
# Покренути програм са параметром 10 | # Покренути програм са параметром 10 | ||
# Ући у функцију ''dohvFibonaciBrojeve'' и прочитати вредност ''fib[9]'' када програм стигне до линије 18: <syntaxhighlight lang="c">return (int*)fib; </syntaxhighlight> | # Ући у функцију ''dohvFibonaciBrojeve'' и прочитати вредност ''fib[9]'' када програм стигне до линије 18: <syntaxhighlight lang="c" inline>return (int*)fib;</syntaxhighlight> | ||
# Скочити на линију 23 у фајлу маин.ц: <syntaxhighlight lang="c">return 0;</syntaxhighlight> | # Скочити на линију 23 у фајлу маин.ц: <syntaxhighlight lang="c" inline>return 0;</syntaxhighlight> | ||
# Завршити програм | # Завршити програм | ||
# Приказати све бреакпоинт-ове | # Приказати све бреакпоинт-ове | ||
# Уклонити све бреакпоинт-ове | # Уклонити све бреакпоинт-ове | ||
# Изаћи из дибагера | # Изаћи из дибагера | ||
==== Решење ==== | |||
# potreban kontekst zadatka | |||
# <syntaxhighlight lang="c" inline>break main.c:14</syntaxhighlight> | |||
# <syntaxhighlight lang="c" inline>run 10</syntaxhighlight> | |||
# potreban kontekst zadatka | |||
# <syntaxhighlight lang="c" inline>jump 23</syntaxhighlight> | |||
# ako se odnosi na završavanje debuggovanja, onda CTRL-c, ako se odnosi na završavanje gdb-a onda <syntaxhighlight lang="c" inline>quit</syntaxhighlight> | |||
# <syntaxhighlight lang="c" inline>info breakpoint</syntaxhighlight> | |||
# <syntaxhighlight lang="c" inline>delete</syntaxhighlight> (bez argumenata) ili <syntaxhighlight lang="c" inline>clear main.c:14</syntaxhighlight> | |||
# <syntaxhighlight lang="c" inline>quit</syntaxhighlight> | |||
[[Категорија:ПОС]] | [[Категорија:ПОС]] | ||
[[Категорија:Лабораторијске вежбе]] | [[Категорија:Лабораторијске вежбе]] |
Тренутна верзија на датум 29. јун 2021. у 10:13
Лаб 4 се појављује у шестом термину вежби.
Група 3
Задатак 1
Поставка
(6п) У фајл test/project/makefile уписати правила за превођење кода датог у фолдерима src и include. У фолдеру obj треба се нађу сви .о фајлови, У project фолдеру треба да се налази извршни фајл под називом program. Правила треба да уклоне непотребне зависности. Користити променљиве, $@, $<, $^ и patsubst где год има смисла.
(4п) У makefile додати акције clean и all. clean треба да брише све фајлове који нису .c или .h или makefile (потребно је уклонити и скривене фајлове који имају ~ на крају, а које генерише едитор) all треба да уради поновно формирање свих зависних фајлова без обзира да ли су ажурирани или не (дакле, треба да се опет генеришу сви .о фајлови, као и сам програм) Заштити clean и all акције тако да се увек извршавају.
Решење
Једно од решења које има максимални број бодова:
# makefile
CC = gcc
OBJDIR = ./obj
SRCDIR = ./src
IDIR = ./src/include
CFLAGS = -w -I$(IDIR)
PROGRAM = ../program
SRC = $(wildcard $(SRCDIR)/*.c)
OBJ = $(patsubst $(SRCDIR)/%.c,$(OBJDIR)/%.o,$(SRC))
DEP = $(patsubst $(SRCDIR)/%.c,$(SRCDIR)/%.d,$(SRC))
$(PROGRAM): $(OBJ)
$(CC) -o $@ $^
$(OBJDIR)/%.o: $(SRCDIR)/%.c | proveridir
$(CC) -o $@ -c $< $(CFLAGS)
$(SRCDIR)/%.d: $(SRCDIR)/%.c
$(CC) -MM -MT $(OBJDIR)/%.o $< $(CFLAGS) > $@
include $(DEP)
clean:
rm -rf obj
rm -f $(PROGRAM)
rm -f $(SRCDIR)/*.d
rm -f *~
all: clean $(PROGRAM)
proveridir:
[ -d $(OBJDIR) ] || mkdir -p $(OBJDIR)
.PHONY:
proveridir
clean
all
Задатак 2
Поставка
(4п) Користећи gdb, написати следеће команде у фајл test/gdb/gdb.txt:
- Створити извршни програм од кода датог у фолдерима src и include
- Поставити бреакпоинт на линију 14 у main.c фајлу
a = dohvFibonaciBrojeve(n);
- Покренути програм са параметром 10
- Ући у функцију dohvFibonaciBrojeve и прочитати вредност fib[9] када програм стигне до линије 18:
return (int*)fib;
- Скочити на линију 23 у фајлу маин.ц:
return 0;
- Завршити програм
- Приказати све бреакпоинт-ове
- Уклонити све бреакпоинт-ове
- Изаћи из дибагера
Решење
- potreban kontekst zadatka
break main.c:14
run 10
- potreban kontekst zadatka
jump 23
- ako se odnosi na završavanje debuggovanja, onda CTRL-c, ako se odnosi na završavanje gdb-a onda
quit
info breakpoint
delete
(bez argumenata) iliclear main.c:14
quit