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

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
Ред 61: Ред 61:
(4) Користећи ''gdv'', написати следеће команде у фајл ''test/gdb/gdb.txt'':
(4) Користећи ''gdv'', написати следеће команде у фајл ''test/gdb/gdb.txt'':
# Створити извршни програм од кода датог у фолдерима ''src'' и ''include''
# Створити извршни програм од кода датог у фолдерима ''src'' и ''include''
# Поставити бреакпоинт на линију 14 у ''main.c'' фајлу
# Поставити бреакпоинт на линију 14 у ''main.c'' фајлу <syntaxhighlight lang="c">a = dohvFibonaciBrojeve(n);</syntaxhighlight>
<syntaxhighlight lang="c">a = dohvFibonaciBrojeve(n);</syntaxhighlight>
# Покренути програм са параметром 10
# Покренути програм са параметром 10
# Ући у функцију ''dohvFibonaciBrojeve'' и прочитати вредност ''fib[9]'' када програм стигне до линије 18:
# Ући у функцију ''dohvFibonaciBrojeve'' и прочитати вредност ''fib[9]'' када програм стигне до линије 18: <syntaxhighlight lang="c">return (int*)fib; </syntaxhighlight>
<syntaxhighlight lang="c">return (int*)fib; </syntaxhighlight>
# Скочити на линију 23 у фајлу маин.ц: <syntaxhighlight lang="c">return 0;</syntaxhighlight>
# Скочити на линију 23 у фајлу маин.ц:
<syntaxhighlight lang="c">return 0;</syntaxhighlight>
# Завршити програм
# Завршити програм
# Приказати све бреакпоинт-ове
# Приказати све бреакпоинт-ове

Верзија на датум 16. мај 2021. у 20:17

Група 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 $< $(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) Користећи gdv, написати следеће команде у фајл 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. Изаћи из дибагера