Laboratorium 9 
==============
Narzedzia do uzdatniania programow pod linuxem - gdb, xxgdb.
------------------------------------------------------------

Lektura podstawowa:
  man: gdb, xxgdb

Katalog publiczny systemow operacyjnych na komputerze rainbow
zawiera dwa programy: 
a) fib.c - liczacy n-ty wyraz ciagu Fibonaciego 
b) skorowidz.c - przekazujacy alfabetycznie posortowana liste slow z pliku
                 podanego jako parametr wraz z numerami linii, w ktorych dane
		 slowo wystepuje; program jest bledny
   skorowidzOK.c - poprawiona wersja programu skorowidz
      

Program pierwszy (poprawny) ma sluzyc do zilustrowania, jak nalezy 
poslugiwac sie debuggerem xxgdb i gdb. Studenci powinni pocwiczyc 
wykorzystywanie mozliwosci xxgdb.

Program drugi zawiera bledy. Zadaniem studentow jest znalezienie
ich przy uzyciu debuggera.

1. Kompilacja: wywolaj program `make'
2. Uzytkowanie: uruchamianie programow fib i skorowidz.
3. Pliki:

   err.h
        Plik naglowkowy biblioteki obslugujacej bledy.

   err.c
	Biblioteka obslugujaca bledy.
   
   fib.c 
        Program liczacy n-ty wyraz ciagu Fibonaciego.
	
   type.h
        Plik naglowkowy zawierajacy definicje typow wykorzystywanych do
	budowy listy i drzewa przez program skorowidz.
   
   skorowidz.c
        Tworzenie skorowidza identyfikatorow z zadanego pliku.
        Program zawiera blad.
  
   skorowidzOK
        Ten sam program poprawiony.
      

4. Korzystanie z xxgdb
 $ xxgdb [<plik_wykonywalny> [<core>]]
 
 Program xxgdb jest graficzna wersja gdb. Pozwala 
 uzytkownikowi sledzic wykonanie programu (przez obserwacje kodu 
 zrodlowego), zatrzymywac program w dowolnym miejscu (ang. breakpoint),
 obserwowac zawartosc stosu wywolan funkcji, wyswietlac aktualne 
 wartosci zmiennych i struktur danych.
 
 Aby mozna bylo uzyc debuggera, program musi byc skompilowany z opcja 
 "-g", ktora informuje kompilator, ze powinien wyprodukowac dodatkowo
 informacje umozliwiajace sledzenie wykonania (czyli tablice symboli).
 
 Jezeli plik <core> zostanie podany jako drugi parametr, debbuger 
 skorzysta z niego, zeby sprawdzic stan programu z momentu utworzenia 
 zrzutu pamieci.
 
 Co trzeba wiedziec:
 a) "run" <lista argumentow> uruchamia program z zadanymi argumentami;
 "args" pozwala je obejrzec
 b) "cont" kontunuje wykonanie programu od miejsca zatrzymania
 c) "next" wykonuje jedna linie kodu, bez wchodzenia do wywolywanych
 w tej linii funkcji
 d) "step" jak wyzej, ale z wchodzeniem
 e) mozna posluzyc sie myszka do ustawienia punktu zatrzymania - ustawiamy 
 kursor w odpowiedniej linii i naciskamy przycisk "break" (ustawienie 
 stale) lub "tbreak" (ustawienie na jeden raz); punkt zatrzymania zostanie
 zaznaczony wizualnie (czerwona bombka) w zrodlach programu; "delete" 
 usuwa wskazane punkty 
 f) mozna zaznaczyc myszka zmienna, ktorej wartosc chcemy sprawdzic i 
 posluzyc sie przyciskami "print" lub "print*", jezeli zmienna jest
 wskaznikiem. Jezeli wykorzystamy lewy guzik myszki, to wynik otrzymamy w 
 okienku dialogowym (na dole), a jezeli prawym, to wyskoczy nam nowe 
 okienko z zawartoscia tej zmiennej (przydatne gdy chcemy sprawdzac 
 wskazniki do wskaznikow ...). Okienko to mozna zlikwidowac klikajac
 na nazwe zmiennej, ktora sprawdzamy.
 g) mozna otworzyc na samym dole okienko "display", ktore bedzie 
 zawieralo aktualne wartosci interesujacych nas zmiennych 
 h) mozna sprawdzac zawartosc stosu wywolan procedur (przydatne przy
 rekurencji) "stack" i poruszac sie po tym stosie "up" i "down".
 
 Przyjemnej zabawy! 
 
