POS/Lab 4 2016

Izvor: SI Wiki
< ПОС
Datum izmene: 17. maj 2021. u 10:06; autor: Fedja (razgovor | doprinosi) (-gnu devugger)
Pređi na navigaciju Pređi na pretragu

Grupa 3

Zadatak 1

Postavka

(6) U fajl test/project/makefile upisati pravila za prevođenje koda datog u folderima src i include. U folderu obj treba se nađu svi .o fajlovi, U project folderu treba da se nalazi izvršni fajl pod nazivom program. Pravila treba da uklone nepotrebne zavisnosti. Koristiti promenljive, $@, $<, $^ i patsubst gde god ima smisla.

(4) U makefile dodati akcije clean i all. clean treba da briše sve fajlove koji nisu .c ili .h ili makefile (potrebno je ukloniti i skrivene fajlove koji imaju ~ na kraju, a koje generiše editor) all treba da uradi ponovno formiranje svih zavisnih fajlova bez obzira da li su ažurirani ili ne (dakle, treba da se opet generišu svi .o fajlovi, kao i sam program) Zaštiti clean i all akcije tako da se uvek izvršavaju.

Rešenje

Jedno od rešenja koje ima maksimalni broj bodova:

# 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

Zadatak 2

(4) Koristeći gdb, napisati sledeće komande u fajl test/gdb/gdb.txt:

  1. Stvoriti izvršni program od koda datog u folderima src i include
  2. Postaviti breakpoint na liniju 14 u main.c fajlu a = dohvFibonaciBrojeve(n);
  3. Pokrenuti program sa parametrom 10
  4. Ući u funkciju dohvFibonaciBrojeve i pročitati vrednost fib[9] kada program stigne do linije 18: return (int*)fib;
  5. Skočiti na liniju 23 u fajlu main.c: return 0;
  6. Završiti program
  7. Prikazati sve breakpoint-ove
  8. Ukloniti sve breakpoint-ove
  9. Izaći iz dibagera

Rešenje

  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