Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 1 / 47 PODSTAWY PROGRAMOWANIA W SYSTEMIE OPERACYJNYM UNIX / LINUX.

Podobne prezentacje


Prezentacja na temat: "SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 1 / 47 PODSTAWY PROGRAMOWANIA W SYSTEMIE OPERACYJNYM UNIX / LINUX."— Zapis prezentacji:

1 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 1 / 47 PODSTAWY PROGRAMOWANIA W SYSTEMIE OPERACYJNYM UNIX / LINUX

2 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 2 / 47 Plan wykładu Edytowanie vi / vim Kompilowanie za pomocą GCC Wykorzystanie GNU Make Debugowanie za pomocą GDB Interakcja programu ze środowiskiem wykonania Tworzenie i używanie bibliotek

3 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 3 / 47 Edytowanie vi / vim Kompilowanie za pomocą GCC Wykorzystanie GNU Make Debugowanie za pomocą GDB Interakcja programu ze środowiskiem wykonania Tworzenie i używanie bibliotek

4 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 4 / 47 vi - uruchomienie vi tworzony jest nowy plik tymczasowy, bez nazwy nazwa; vi plik1 plik2 … do edycji otwierane są pliki z listy argumentów wywołania edytora vi (przełączanie :e); vi –R plik1 pliki plik1 otwierany tylko do odczytu; edycja tylko na buforze, zapis pliku trzeba wymuszać( np. :w!); vi –r wyświetlana jest lista odnalezionych plików wymiany; vi –r plik pozwala na odzyskanie pliku wymiany plik (taki sam efekt :recovery) T.Przechlewski, Ściąga do vi

5 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 5 / 47 vi – podstawowe operacje na plikach ZZ lub :x wyjście z zapisaniem do bieżącego pliku :w zapisanie zmian do bieżącego pliku :q wyjście, jeśli plik nie był modyfikowany :q! wyjście bez zapisywania zmian :w plik zapisanie zawartości bufora do pliku :x,yw plik zapisanie od wiersza x do y do pliku :e plik rozpoczęcie edycji pliku :e! pominięcie dokonanych modyfikacji i udostępnienie ponownie bieżącego pliku do edycji :r plik wstawienie zawartości pliku za bieżącym wierszem :n edycja następnego pliku z listy argumentów :N edycja poprzedniego pliku z listy argumentów :f plik nadanie bieżącemu plikowi nazwę plik :ls wyświetlenie listy aktualnie edytowanych plików

6 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 6 / 47 vi –przejście do trybu wprowadzania tekstu i wstawianie tekstu przed kursorem I przesuwa kursor do początku wiersza bieżącego i przechodzi do trybu wpisywania o tworzy wiersz poniżej bieżącego, zaczyna tryb wpisywania O tworzy wiersz powyżej bieżącego, zaczyna tryb wpisywania a wstawianie tekstu za bieżąca pozycja kursora A przesuwa kursor na koniec wiersza bieżącego, zaczyna trybu wpisywania rc wstawienie znaku c w pozycji kursora R przejście do trybu nadpisywania tekstu przejście do trybu wprowadzania poleceń tryb poleceń tryb edycji i, a

7 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 7 / 47 vi – przesuwanie kursora ^ początek wiersza z lewej $ koniec wiersza z prawej + lub początek następnego wiersza - początek poprzedniego wiersza G początek ostatniego wiersza w pliku w początek najbliższego słowa z prawej b początek najbliższego słowa z lewej e koniec najbliższego słowa z prawej { najbliższy początek akapitu z lewej } najbliższy koniec akapitu z prawej /napis wystąpienie napisu z prawej ?napis wystąpienie napisu z lewej Polecenia z powyższego zestawu mogą być poprzedzone liczbą określającą zwielokrotnienie, np. 3w oznacza początek trzeciego słowa z prawej strony kursora a 1G początek pierwszego wiersza.

8 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 8 / 47 vi –usuwanie i modyfikowanie tekstu Do usuwania fragmentów tekstu służy polecenie dzakres, gdzie zakres określa, co zostanie usunięte. Zakres określamy dodając do polecenia d polecenie przesunięcia kursora, m.in.: nx usuwa n znaków na prawo od kursora nX usuwa n znaków na lewo od kursora D lub d$ usuwa od kursora do końca wiersza dd usuwa bieżący wiersz ndd lub dnd usuwa n wierszy począwszy od bieżącego d0 usuwa od początku wiersza do kursora dw usuwa od kursora do początku następnego wyrazu dG usuwa od bieżącego wiersza do końca pliku d/napis usuwa od kursora do podanego napisu (napis jest wyrażeniem regularnym) cctekst zamienia bieżący wiersz na tekst Ctekst zamienia od kursora do końca wiersza na tekst

9 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 9 / 47 vi – przesuwanie tekstu z / do bufora Usuwany fragment tekstu jest kopiowany do specjalnego bufora. Zawartość tego bufora może zostać wstawiona w innym miejscu za pomocą polecenia p lub P. Polecenie y, o składni podobnej do poleceń d czy c, kopiuje fragment tekstu określony przez zakres do bufora nie nazwanego. d, dd lub D usuwa tekst do bufora yy lub Y kopiuje bieżący wiersz do bufora nyy lub nY kopiuje n wierszy do bufora, począwszy od bieżącego ynw kopiuje n kolejnych słów do bufora y/tekst kopiuje od kursora do tekstu do bufora p wstawia zawartość bufora za wiersz bieżący P jak wyżej, ale przed wiersz bieżący tekstbufor d, y p

10 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 10 / 47 vi – operacje wyszukiwania i zamiany /napis szuka (do przodu) ciągu znaków napis od kursora do pierwszego znalezionego lub do końca pliku, a następnie od początku pliku do wiersza bieżącego ?napis szuka jak wyżej, ale do tyłu n powtórzenie ostatniego wyszukiwania w tym samym kierunku N powtórzenie ostatniego wyszukiwania w kierunku przeciwnym Zamiana jest realizowana za pomocą polecenia :s. W najprostszej postaci polecenie to ma postać: :s/tekst/tekst-do-wymiany Instrukcja taka działa tylko w obrębie bieżącego wiersza i zamienia pierwsze wystąpienie tekstu na tekst-do-wymiany.

11 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 11 / 47 vi – konfigurowanie edytora :set ai automatyczne wcinanie wiersza na głębokość wcięcia wiersza poprzedniego ( noai – wyłączenie) :set nu numerowanie wierszy ( nonu – wyłączenie) :set ts=n rozmiar wcięcia po naciśnięciu :syntax on podświetlanie składni set ai set nu synatx on. exrc Ustawienia można na stałe zapisać w pliku.exrc w katalogu domowym, np.:

12 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 12 / 47 Kompilowanie za pomocą GCC Edytowanie vi / vim Kompilowanie za pomocą GCC Wykorzystanie GNU Make Debugowanie za pomocą GDB Interakcja programu ze środowiskiem wykonania Tworzenie i używanie bibliotek

13 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 13 / 47 GCC GCC (ang. GNU Compiler Collection) jest zestawem kompilatorów kompilatory m.in. gcc, g++, g77 (fortran), itd. Składnia (dla C i C++) –gcc [opcje | pliki] – kompilator C –g++ [opcje | pliki] – kompilator C++ Etapy działania GCC –preprocesorowanie (ang. preprocessing) –kompilacja (ang. compilation) –asemblacja (ang. assembling) –konsolidacja (ang. linking) K.Wall, Using the GNU Compiler Collection, SAMS

14 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 14 / 47 GCC – rozpoznawane rozszerzenia plików.c źródła C.C źródła C++.cc źródła C++.cxx źródła C++.c++ źródła C++.i preprocessed C.ii preprocessed C++.s źródła asemblera.S źródła asemblera.h pliki nagłówkowe.o pliki typu obiekt.a biblioteki.so biblioteki

15 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 15 / 47 GCC – kompilacja jednego źródła $ ls –l -rw-r--r-- 1 burek users :04 prostokat.c $ gcc prostokat.c $ ls -l -rwxr-xr-x 1 burek users :05 a.out -rw-r--r-- 1 burek users :04 prostokat.c $./a.out obwod = 60, pole = 200 $ gcc prostokat.c -o prostokat $ ls -l -rwxr-xr-x 1 burek users :05 a.out -rwxr-xr-x 1 burek users :11 prostokat -rw-r--r-- 1 burek users :04 prostokat.c $./prostokat obwod = 60, pole = 200

16 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 16 / 47 GCC – główne opcje -E Tylko preprocesing, na wyjściu dostajemy pliki źródłowe przerobione przez preprocesor. -S Zatrzymuj po poziomie kompilacji, nie assembluj, na wyjściu mamy plik źródłowym z kodem assemblera. -c Zatrzymuj po poziomie kompilacji lub asemblacji, bez linkowania. Na wyjściu dostajemy pliki typu obiekt dla każdego pliku źródłowego. -o nazwa Wskazanie nazwy pliku wynikowego dla danej operacji (przy kompilacji standardowo dostajemy a.out).

17 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 17 / 47 GCC – kompilacja wielu źródeł $ gcc prostokat.c lib.c -o prostokat ; ls -l -rw-r--r-- 1 burek users :07 lib.c -rwxr-xr-x 1 burek users :08 prostokat -rw-r--r-- 1 burek users :04 prostokat.c $ gcc –c prostokat.c lib.c ; ls -l -rw-r--r-- 1 burek users :07 lib.c -rw-r--r-- 1 burek users :10 lib.o -rw-r--r-- 1 burek users :04 prostokat.c -rw-r--r-- 1 burek users :10 prostokat.o $ gcc prostokat.o lib.o -o prostokat ; ls -l -rw-r--r-- 1 burek users :07 lib.c -rw-r--r-- 1 burek users :10 lib.o -rwxr-xr-x 1 burek users :11 prostokat -rw-r--r-- 1 burek users :04 prostokat.c -rw-r--r-- 1 burek users :10 prostokat.o W prostokat.c jest f-cja main(), w lib.c funkcje wywoływane z main.

18 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 18 / 47 GCC – inne opcje (1) Opcje preprocesora: -D macro Ustaw macro na 1. -D macro=defn Zdefinjuj makro macro jako defn. -U macro Skasuj definicje makra macro. Opcje debugera: -g Dodatkowe informacje dla debugera. Kompilacja z tą opcją pozwala na późniejsze debugowanie programu. -ggdb Dodatkowe informacje dla DBG (możliwość wykorzystania rozszerzeń GDB) Opcje preprocesora: -I dir Dodaje katalog dir do listy katalogów przeszukiwanych ze względu na pliki nagłówkowe (include file). -L dir Dodaje katalog dir do listy katalogów przeszukiwanych przy użyciu przełącznika -l (patrz opcje linkera)

19 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 19 / 47 GCC – inne opcje (2) Opcje linkera: -llibrary Użyj biblioteki library kiedy linkujesz. Uwaga! Gcc automatycznie dodaje przedrostel lib i końcówkę.a, np. -lFOX w celu załadowania libFOX.a. Patrz też -L. -nostdlib Nie używaj standardowych bibliotek systemowych i startowych plików kiedy linkujesz. Używaj tylko wskazane. Opcje optymalizacji: -O Optymalizacja. -Olevel Poziom optymalizacji: 0,1,2,3, jeśli 0, to brak optymalizacji. Opcje ostrzeżeń: -Wall Wypisuje ostrzeżenia dla wszystkich sytuacji, które pretendują do konstrukcji, których używania się nie poleca i których użycie jest proste do uniknięcia, nawet w połączeniu z makrami.

20 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 20 / 47 GCC – przykłady użycia $ gcc –c –O2 prostokat.c $ gcc –c -I../include prostakat.c $ gcc prostokat.c –L../libs –ltest $ gcc –c –D DEBUG prostokat.c $ gcc –g prostokat.c –o prostokat

21 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 21 / 47 GCC – interpretacja komunikatów o błędach $ gcc prostokat.c prostokat.c: In function `main': prostokat.c:10: error: `obwod' undeclared (first use in this function) prostokat.c:10: error: (Each undeclared identifier is reported only once prostokat.c:10: error: for each function it appears in.) prostokat.c:11: error: `pole' undeclared (first use in this function) prostokat.c:16:2: warning: no newline at end of file #include int main() { int x, y; x = 10; y = 20; obwod = 2*x + 2*y; pole = x*y; printf( obwod = %d, pole = %d \n, obwod, pole); return( 0); } prostokat.c linia 10 linia 11 linia 16

22 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 22 / 47 Wykorzystanie GNU Make Edytowanie vi / vim Kompilowanie za pomocą GCC Wykorzystanie GNU Make Debugowanie za pomocą GDB Interakcja programu ze środowiskiem wykonania Tworzenie i używanie bibliotek

23 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 23 / 47 Budowa prostego pliku Makefile outprogname : binarytree.o mainprog.o gcc -o outprogname binarytree.o mainprog.o binarytree.o : binarytree.c gcc -c binarytree.c mainprog.o : mainprog.c gcc -c mainprog.c Makefile cel : zależności reguła $ make gcc -c mainprog.c gcc -c binarytree.c gcc -o outprogname binarytree.o mainprog.o $ vi main.c $ make gcc -c mainprog.c gcc -o outprogname binarytree.o mainprog.o Wykonanie make dla nowych plików źródłowych (polecenie make szuka w aktualnym katalogu pliku Makefile) Ponowne wykonanie make po modyfikacji mainprog.c J.Kroon, CS Students Linux User's Guide: Writing a Makefile

24 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 24 / 47 Kiedy make wykona regułę ? 1) Jeżeli plik celu nie istnieje 2) Jeżeli plik celu jest starszy niż któryś z plików określonych w zależnościach dla tego celu outprogname : binarytree.o mainprog.o gcc -o outprogname binarytree.o mainprog.o binarytree.o : binarytree.c binarytree.h gcc -c binarytree.c mainprog.o : mainprog.c binarytree.h gcc -c mainprog.c Makefile W zależnościach możemy podać pliki, które nie są jawnie wykorzystane w regule tworzenia, ale których zmiany powinny pociągnąć za sobą ponowne tworzenie celu.

25 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 25 / 47 Użycie zmiennych w pliku Makefile cc=gcc cflags=-O3 -g ldflags=-g outprogname : binarytree.o mainprog.o ${cc} ${ldflags} -o outprogname binarytree.o mainprog.o binarytree.o : binarytree.c ${cc} ${cflags} -c binarytree.c mainprog.o : mainprog.c ${cc} ${cflags} -c mainprog.c Makefile $ make gcc -O3 -g -c mainprog.c gcc -O3 -g -c binarytree.c gcc -g -o outprogname binarytree.o mainprog.o $ make cflags=-O2 gcc -O2 -c mainprog.c gcc -O2 -c binarytree.c gcc -g -o outprogname binarytree.o mainprog.o 1.2.

26 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 26 / 47 Makefile - zmienne wbudowane - nazwa celu ($% dla archiwów) $< - pierwszy wymagany $^ - wszystkie wymagane, bez powtórzeń $+ - wszystkie wymagane, z powtórzeniami $? - wszystkie wymagane nowsze niż cel $ make gcc -O3 -g -c mainprog.c gcc -O3 -g -c binarytree.c gcc -g -o outprogname binarytree.o mainprog.o cc=gcc cflags=-O3 -g ldflags=-g outprogname : binarytree.o mainprog.o ${cc} ${ldflags} -o $^ binarytree.o : binarytree.c ${cc} ${cflags} -c $< mainprog.o : mainprog.c ${cc} ${cflags} -c $< Makefile

27 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 27 / 47 Makefile - użycie dopasowywania wzorców cc=gcc cflags=-O3 -g ldflags=-g outprogname : binarytree.o mainprog.o ${cc} ${ldflags} -o $^ %.o : %.c ${cc} ${cflags} -c $< Makefile Tworzenie wszystkich obiektów wymienionych we wcześniejszych zależnościach $ make gcc -O3 -g -c mainprog.c gcc -O3 -g -c binarytree.c gcc -g -o outprogname binarytree.o mainprog.o

28 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 28 / 47 Makefile - funkcje zaawansowane Funkcje tekstowe: $(subst FROM,TO,TEXT) zamienia tekst FROM na tekst TO w tekście TEXT $(patsubst PATTERN,REPLACEMENT,TEXT) zamienianie ze wzorcem $(strip STRING) usuwa białe znaki z początku i końca $(filter PATTERN...,TEXT) zwraca te słowa w tekście które pasują do jednego ze wzorców $(filter-out PATTERN...,TEXT) odwrotnie niż poprzednia $(sort LIST) sortuje listę słów, usuwa duplikaty $(word N,TEXT) zwraca n-te słowo $(words TEXT) zwraca liczbę słów w tekście Funkcje od plików: $(dir NAZWY) wydobywa nazwy katalogów $(notdir NAZWY) wydobywa ostatni człon $(suffix NAZWY) wydobywa rozszerzenia $(basename NAZWY) wydobywa wszystko oprócz rozszerzeń wzórrozwinięcie $(patsubst %.c,%.o,x.c.c bar.c) x.c.o bar.o sources = foo.c bar.c baz.s ugh.h foo: $(sources)foo: foo.c bar.c baz.s ugh.h cc $(filter %.c %.s,$(sources)) -o foo cc foo.c bar.c baz.s -o foo

29 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 29 / 47 Przykład pliku Makefile CFLAGS+=-Wall -g CXXFLAGS+=-Wall -g MAIN_TARGETS_UNSORTED=$(patsubst %.cpp, %, $(wildcard *.cpp)) $(patsubst %.c, %,\ $(wildcard *.c)) MAIN_TARGETS=$(sort $(MAIN_TARGETS_UNSORTED)) all: $(MAIN_TARGETS) %: %.c %.h $(CC) $(CFLAGS) $(CPPFLAGS) $< -o %: %.c $(CC) $(CFLAGS) $(CPPFLAGS) $< -o %: %.cpp %.h $(CXX) $(CXXFLAGS) $(CPPFLAGS) $< -o %: %.cpp $(CXX) $(CXXFLAGS) $(CPPFLAGS) $< -o clean: rm -f $(MAIN_TARGETS) Makefile

30 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 30 / 47 Debugowanie za pomocą GDB Edytowanie vi / vim Kompilowanie za pomocą GCC Wykorzystanie GNU Make Debugowanie za pomocą GDB Interakcja programu ze środowiskiem wykonania Tworzenie i używanie bibliotek

31 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 31 / 47 gdb - podstawy Kompilacja programu - debugowany plik wykonywalny musi mieć dołączoną na etapie kompilacji i linkowania tablicę symboli (opcja -g) $ gcc -g prostokat.c./prostokat $ gcc -g -c mainprog.c $ gcc -g -c binarytree.c $ gcc -g -o outprogname binarytree.o mainprog.o./outprogname Uruchomienie gdb bez argumentów$ gdb z nazwą programu$ gdb outproganem z nazwą programu i pidem procesu$ gdb outproganem z nazwą programu i zrzutem pamięci$ gdb qsort2 core.2957 M.Loukides, A.Oram, Getting to Know gdb Core was generated by `qsort2'. Program terminated with signal 7, Emulator trap. #0 0x2734 in qsort2 (l=93643, u=93864, strat=1) at qsort2.c: do i++; while (i <= u && x[i] < t); (gdb) quit $

32 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 32 / 47 gdb – pliki i uruchomienie programu file [file] użyj plik file jako plik wykonywalny i tablicę symboli core [file] użyj plik file jako zrzut pamięci load [file] dołącz dynamicznie plik file info share wyświetl nazwy wszystkich aktualnie załadowanych bibliotek dzielonych run arglist uruchom program z listą argumentów arglist run uruchom program z aktualną listą argumentów set args arglist ustal listę argumentów arglist dla kolejnego uruchomienia set args wyczyść listę argumentów dla kolejnego uruchomienia show args wyświetl listę argumentów dla kolejnego uruchomienia show env wyświetl wszystkie zmienne systemowe

33 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 33 / 47 gdb - pułapki (breakpoints) Użycie b jest równoważne użyciu break. b [file:]line ustaw breakpoint w linii line [w pliku file ] b [file:]func ustaw breakpoint na funkcji func [w pliku file ] b... if expr przerwij warunkowo, jeżeli expr prawdziwe tbreak... breakpoint tymczasowy (jednorazowy) rbreak regex przerywaj na wszystkich funkcjach dopasowanych do wyrażenia regex catch event przerwij po zdarzeniu event, (zdarzeniami mogą być catch, throw, exec, fork, vfork, load, unload ) info break wyświetl zdefiniowane breakpointy clear usuń breakpoint z kolejnej instrukcji clear [file:]func usuń breakpoint z funkcji func clear [file:]line usuń breakpoint z linii line delete [n] usuń wszystkie breakpointy [lub o numerze n ]

34 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 34 / 47 gdb - wykonanie programu continue, c [count] kontynuuj wykonanie; jeżeli określono count to ignoruj count kolejnych breakpointów step, s [count] wykonaj pojedynczy krok (wchodzi do wnętrz funkcji); powtórz count razy next, n [count] wykonaj pojedynczy krok; powtórz count razy until location wykonaj aż do lokalizacji location (np. nr linii) finish wykonaj aż do zakończenia aktualnej f-cji i wyświetl zwróconą wartość jump line wznów wykonanie od linii line set var=expr zapisz do zmiennej o nazwie var wartość expr backtrace wyświetl wszystkie ramki ze stosu (m.in. informacja o wywołanych funkcjach)

35 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 35 / 47 gdb - wyświetlanie danych print, p [/f][expr] wyświetl wartość wyrażenia expr (albo wyrażenia ostatnio wyświetlanego) zgodnie z formatem f display [/f][expr] wyświetlaj wartość wyrażenia expr zawsze gdy program się zatrzyma (zgodnie z formatem f ) display wyświetl listę wszystkich obserwowanych zmiennych undisplay n usuń z listy obserwowanych zmiennych n -te wyrażenie

36 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 36 / 47 gdb - sygnały i przeglądanie kodu handle signal act ustal reakcję act gdb na sygnał signal ; możliwe reakcje: print (wyświetl informację o pojawieniu się sygnału), noprint (nie wyświetlaj), stop (zatrzymaj wykonanie), nostop (nie zatrzymuj), pass (pozwól debugowanemu programowi na odebranie sygnału), nopass (nie przekazuj sygnału do programu) info signals wyświetl tablicę obsługiwanych sygnałów GDB list wyświetl 10 kolejnych linii kodu list - wyświetl 10 poprzednich linii kodu list [file:]num wyświetl 10 linii kodu wokół linii num w [pliku file ] list [file:]func wyświetl 10 linii kodu wokół początku funkcji func w [pliku file ] list f,l wyświetl kod od linii f do linii l info sources wyświetl listę wszystkich plików źródłowych

37 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 37 / 47 Interakcja programu ze środowiskiem wykonania Edytowanie vi / vim Kompilowanie za pomocą GCC Wykorzystanie GNU Make Debugowanie za pomocą GDB Interakcja programu ze środowiskiem wykonania Tworzenie i używanie bibliotek M.Mitchel, J.Oldham, A.Samuel, LINUX: Programowanie dla zaawansowanych

38 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 38 / 47 Argumenty wywołania i zmienne środowiskowe #include extern char** environ; int main( int argc, char **argv) { char **var; for( var = environ; *var != NULL; ++var) printf( "%s\n", *var); for( int i=0; i

39 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 39 / 47 stdin, stdout i stderr standardowy strumień wejścia: stdin 0np. scanf standardowy strumień wyjścia: stdout 1np. printf standardowy strumień błędów: stderr 2 stdout jest buforowany, fflush( stdout) powoduje opróżnienie bufora f-cje read, write czy fprint, które oczekują jako argumentu uchwytu do pliku, mogą obsłużyć standardowe strumienie, np.: write( stderr, abc, 4) przekierowanie wyjść do plików lub potoków przy wywołaniu programu (przekierowanie stderr do stdout musi być po przekierowaniu stdout do pliku, ale przed przekierowaniem do potoku): $ program > output_file.txt 2>&1 $ program 2>&1 | filter

40 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 40 / 47 Tworzenie i używanie bibliotek Edytowanie vi / vim Kompilowanie za pomocą GCC Wykorzystanie GNU Make Debugowanie za pomocą GDB Interakcja programu ze środowiskiem wykonania Tworzenie i używanie bibliotek

41 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 41 / 47 Tworzenie biblioteki statycznej int add( int a, int b); void shrink( char *str); libtest.h #include "libtest.h" int add( int a, int b) { return a+b;} void shrink( char *str) { str[1]=0;}; libtest.c Biblioteka statyczna jest plikiem archiwum (rozszerzenie *.a) zawierającym zbiór obiektów (rozszerzenie *.o), które powstały w wyniku kompilacji. Do tworzenia i zarządzania archiwami służy program ar. $ ar cr libname.a obj1.o obj2.o obj3.o... createreplace $ gcc -c libtest.c $ ar cr libtest.a libtest.o

42 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 42 / 47 Użycie biblioteki statycznej Aby dołączyć bibliotekę statyczną: dołączamy w kodzie źródłowym programu odniesienie do pliku nagłówkowego biblioteki podczas konsolidacji programu używamy przełącznika –l podając nazwę biblioteki (nazwa bez lib i.a ) opcjonalnie wykorzystujemy przełącznik –L aby wskazać katalogi, które mogą zawierać bibliotekę Uwaga: kolejność wywołania przełączników ma znaczenie! Biblioteki należy dołączać na końcu linii poleceń, ponieważ linker przeszukuje je pod kątem wszystkich symboli, do których były odniesienia w przetworzonych wcześniej plikach i które nie zostały jeszcze zdefiniowane. Fragmenty kodu z bibliotek są kopiowane do pliku wynikowego. #include "libtest.h" int main() { int c = add( 10, 20); return 0; } static.c $ ls libtest.a static.c $ gcc static.c –o static –L. -ltest

43 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 43 / 47 Tworzenie biblioteki współdzielonej Biblioteka współdzielona jest zbiorem obiektów o rozszerzeniu *.so.#1.#2.#3 (numery #1, #2 i opcjonalne #3 oznaczają numery wersji – począwszy od najbardziej istotnego). Jest on linkowana przy pomocy gcc z opcjami –shared i –fPIC (opcja –fPIC również przy kompilacji obiektów). W kodzie biblioteki nie może być f-cji main, mogą być za to _init() i _fini() (po ustawieniu opcji -nostartfiles ). $ gcc –shared -fPIC –o libname.so obj1.o obj2.o obj3.o... int add( int a, int b); void shrink( char *str); libtest.h #include "libtest.h" #include int add( int a, int b) { return a+b;} void shrink( char *str) { str[1]=0;} _init() { printf connect...\n";} _fini() { printf "... free\n";} libtest.c $ gcc -c –fPIC libtest.c $ gcc –shared –fPIC libtest.o \ -o libtest.so.0.1 -nostartfiles

44 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 44 / 47 Użycie biblioteki współdzielonej - łączenie Aby dołączyć bibliotekę współdzieloną podczas konsolidacji wykonujemy dokładnie te same czynności co przy dołączaniu biblioteki statycznej. Opcjonalnie możemy w kod wynikowy wkompilować informację o ścieżce, gdzie program będzie miał szukać bibliotekę podczas uruchamiania (opcja –Wl,-rpath,path ). Kod programu nie zawiera kodu bibliotecznego, a jedynie odnośniki do niego. Bibliotek jest ładowana przy uruchamianiu programu. Każde podłączenie biblioteki powoduje wywołanie f-cji _init(), odłączenie - wywołanie f-cji _fini(). #include "libtest.h" int main() { int c = add( 10, 20); return 0; } sshared.c $ ls libtest.so.0.1 sshared.c $ gcc sshared.c –o sshared –L. –ltest \ -Wl,-rpath,.

45 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 45 / 47 Użycie biblioteki współdzielonej – ładowanie (1) Bibliotek współdzielona może zostać załadowana dynamicznie podczas działania programu. Służą do tego f-cje biblioteki dl: 1) ładowanie biblioteki void *dlopen(const char *file, int mode); 2) obsługa błędów char *dlerror(void); 3) ładowanie symboli (m.in. funkcji) void *dlsym(void *restrict handle, const char *restrict name); 4) zwolnienei biblioteki int dlclose(void *handle); Funkcje wymagają dołączenia do programu pliku nagłókowego oraz biblioteki dl. Każde załadowanie biblioteki powoduje wywołanie f-cji _init(), zwolnienie biblioteki - wywołanie f-cji _fini().

46 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 46 / 47 Użycie biblioteki współdzielonej – ładowanie (2) #include int ( *Add)( int, int); int main() { void *handle = dlopen( "./libtest.so.0.1", RTLD_LAZY); if( !handle) dlerror(); else { Add = dlsym( handle, "add"); int c = Add( 10, 20); dlclose( handle); } return 0; } dshared.c $ gcc dshared.c –o dshared -ldl

47 SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 47 / 47 Biblioteki - informacje dodatkowe Biblioteki podane przy konsolidacji po opcji –l wyszukiwane są standardowo w katalogach /lib i /usr/lib. Można to zmieniać za pomocą zmiennej środowiskowej LD_LIBRARY_PATH W systemie mogą istnieć wersje statyczna i współdzielona tej samej biblioteki: –linker dołącza bibliotekę, na którą pierwszą się natknie przy przeszukiwaniu katalogów bibliotek; –jeżeli w tym samym katalogu jest wersja statyczna i współdzielona, to pierwszeństwo ma wersja współdzielona; –użycie opcji –static wymusza użycie wersji statycznej biblioteki; –współdzielona wersja biblioteki sama rozwiązuje swoje zależności (czyli dołącza kolejne wymagane biblioteki); –statyczna wersja biblioteki wymaga jawnego obsłużenia swoich zależności (przy linkowaniu programu trzeba dołączyć również biblioteki potrzebne dla bibliotek). Zależności w programie można sprawdzić za pomocą polecenia ldd Biblioteki funkcjonują pod 3 podstawowymi nazwami: –real name, np. libtest.so.0.1 –soname, np. libtest.so.0 ( $ ln –s libtest.so.0.1 libtest.so.0 ) –linker name, np. libtest.so ( $ ln –s libtest.so.0.1 libtest.so )


Pobierz ppt "SYSTEMY OPERACYJNE KOMPUTERÓW UNIX – PODSTAWY PROGRAMOWANIA 1 / 47 PODSTAWY PROGRAMOWANIA W SYSTEMIE OPERACYJNYM UNIX / LINUX."

Podobne prezentacje


Reklamy Google