ПОС/Лаб 4 2016 — разлика између измена

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
м (+napomena o terminu u kom je lab rađen)
м (-spoiler)
 
(Нису приказане 2 међуизмене другог корисника)
Ред 1: Ред 1:
{{tocright}}
{{tocright}}
Лаб 3 се појављује у '''шестом''' термину вежби.
Лаб 4 се појављује у '''шестом''' термину вежби.
 
<div class="unhide-spoilers"></div>


== Група 3 ==
== Група 3 ==
=== Задатак 1 ===
=== Задатак 1 ===
==== Поставка ====
==== Поставка ====
(6) У фајл ''test/project/makefile'' уписати правила за превођење кода датог у фолдерима ''src'' и ''include''.  
'''(6п)''' У фајл ''test/project/makefile'' уписати правила за превођење кода датог у фолдерима ''src'' и ''include''.  
У фолдеру ''obj'' треба се нађу сви ''.о'' фајлови,  
У фолдеру ''obj'' треба се нађу сви ''.о'' фајлови,  
У ''project'' фолдеру треба да се налази извршни фајл под називом ''program''.  
У ''project'' фолдеру треба да се налази извршни фајл под називом ''program''.  
Ред 13: Ред 11:
Користити променљиве, ''$@'', ''$<'', ''$^'' и ''patsubst'' где год има смисла.
Користити променљиве, ''$@'', ''$<'', ''$^'' и ''patsubst'' где год има смисла.


(4) У ''makefile'' додати акције ''clean'' и ''all''.
'''(4п)''' У ''makefile'' додати акције ''clean'' и ''all''.
''clean'' треба да брише све фајлове који нису ''.c'' или ''.h'' или ''makefile'' (потребно је уклонити и скривене фајлове који имају ''~'' на крају, а које генерише едитор)
''clean'' треба да брише све фајлове који нису ''.c'' или ''.h'' или ''makefile'' (потребно је уклонити и скривене фајлове који имају ''~'' на крају, а које генерише едитор)
''all'' треба да уради поновно формирање свих зависних фајлова без обзира да ли су ажурирани или не  
''all'' треба да уради поновно формирање свих зависних фајлова без обзира да ли су ажурирани или не  
Ред 21: Ред 19:
==== Решење ====
==== Решење ====
Једно од решења које има максимални број бодова:
Једно од решења које има максимални број бодова:
<syntaxhighlight lang="makefile" class="spoiler">
<syntaxhighlight lang="makefile">
# makefile
# makefile


Ред 61: Ред 59:


=== Задатак 2 ===
=== Задатак 2 ===
(4) Користећи ''gdb'', написати следеће команде у фајл ''test/gdb/gdb.txt'':
==== Поставка ====
'''(4п)''' Користећи ''gdb'', написати следеће команде у фајл ''test/gdb/gdb.txt'':
# Створити извршни програм од кода датог у фолдерима ''src'' и ''include''
# Створити извршни програм од кода датог у фолдерима ''src'' и ''include''
# Поставити бреакпоинт на линију 14 у ''main.c'' фајлу <syntaxhighlight lang="c" inline>a = dohvFibonaciBrojeve(n);</syntaxhighlight>
# Поставити бреакпоинт на линију 14 у ''main.c'' фајлу <syntaxhighlight lang="c" inline>a = dohvFibonaciBrojeve(n);</syntaxhighlight>
Ред 73: Ред 72:


==== Решење ====
==== Решење ====
<div class="spoiler">
# potreban kontekst zadatka
# potreban kontekst zadatka
# <syntaxhighlight lang="c" inline>break main.c:14</syntaxhighlight>
# <syntaxhighlight lang="c" inline>break main.c:14</syntaxhighlight>
Ред 83: Ред 81:
# <syntaxhighlight lang="c" inline>delete</syntaxhighlight> (bez argumenata) ili <syntaxhighlight lang="c" inline>clear main.c:14</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>
# <syntaxhighlight lang="c" inline>quit</syntaxhighlight>
</div>


[[Категорија:ПОС]]
[[Категорија:ПОС]]
[[Категорија:Лабораторијске вежбе]]
[[Категорија:Лабораторијске вежбе]]

Тренутна верзија на датум 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:

  1. Створити извршни програм од кода датог у фолдерима src и include
  2. Поставити бреакпоинт на линију 14 у main.c фајлу a = dohvFibonaciBrojeve(n);
  3. Покренути програм са параметром 10
  4. Ући у функцију dohvFibonaciBrojeve и прочитати вредност fib[9] када програм стигне до линије 18: return (int*)fib;
  5. Скочити на линију 23 у фајлу маин.ц: return 0;
  6. Завршити програм
  7. Приказати све бреакпоинт-ове
  8. Уклонити све бреакпоинт-ове
  9. Изаћи из дибагера

Решење

  1. potreban kontekst zadatka
  2. break main.c:14
  3. run 10
  4. potreban kontekst zadatka
  5. jump 23
  6. ako se odnosi na završavanje debuggovanja, onda CTRL-c, ako se odnosi na završavanje gdb-a onda quit
  7. info breakpoint
  8. delete (bez argumenata) ili clear main.c:14
  9. quit