Szukanie bledow w kodzie czyli obsluga Debuggera

Pedros
Pewnie nie raz zdarzylo wam sie ze po uruchomieniu programu wyskoczyl AccessVolation i pewnie nie wiedzieliscie dlaczego tak sie stalo przeciez jestescie doswiadczonymi programistami i takie rzeczy nie powinny wam sie przydarzac. No ale trudno stalo sie i teraz nalezy znalesc ten kawalek kodu ktory powoduje ze nasz program nie dziala tak jak bysmy tego chcieli. Moge sie przyznac bez bicia ze kiedys jak szukalem bledu w programie to uzywalem ShowMessage(zmienna) zeby zobaczyc co bylo w danej zmiennej czy nie zawiera ona blednej wartosci. Bylo to dawno i jeszcze nie wiedzialem ze Borland wyposarzyl Delphi w Debugger. Jest to program dzieki ktoremu mozemy podejrzec co jaka zmienna zawiera w danej chwili. Do tego sluza tzw 'Breakpointy' albo po polsku 'Punkty kontrolne'. Po ustawieniu takiego punktu kontrolnego program bedzie dzialal do czasu az natrafi na taki punkt ale dokladniej moze za chwile. Mozemy takze przesledzic dzialanie naszego programu linia po linii aby zobaczyc czy akurat wtedy kiedy trzeba wykonywane sa te polecenia ktore mielismy na mysli piszac program. Mysle ze wystarczy tytulem wstepu teraz zabierzmy sie do pracy.

Jesli uruchomilismy program i wyskoczyl nam blad i nie wiemy dlaczego ale jestesmy w stanie sprawdzic tak mniej wiecej kiedy ow blad sie pokazuje to w takim wypadku najlepiej poustawiac Punkty kontrolne. Aby to zrobic mozna ustawic kursor na linii ktora podejrzewamy o utrudnianie pracy naszego programu i naciskamy F5. Jesli wszystko dobrze zrobilismy pojawi sie taka czerwona linia i to jest wlasnie nasz Punkt kontrolny. Teraz tylko wystarczy normalnie uruchomic program naciskajac F9 i starac sie wywolac ta czesc kodu gdzie stoi nasz Punkt kontrolny. Gdy bedzie wykonywana odpowiednia linijka program sie zatrzyma a na pasku Start powinno zamigac nam Delphi. Przelaczamy sie do delphi i patrzymy. W oknie edytora po lewej stronie na tym szarym pasku jest taka strzaleczka wskazujaca ktora wlasnie linie ogladamy. Teraz mamy chwile i mozemy podejrzec co znajduje sie w zmiennych. Aby to zrobic nalezy najechac na zmienna ktora nas interesuje i na chwile sie zatrzymac. Powinno pojawic sie takie male okienko tzw. Hint a w nim 'nazwa_zmiennej = wartosc'. Jesli zamiast wartosci widzimy napis 'Inaccessible value' to znaczy ze dana zmienna nie ma jeszcze zadnej wartosci. Jezleli juz sie naogladalismy wartosci zmiennych i stwierdzamy ze wszystko jest jak nalezy to naciskamy jeszcze raz F9 i program wykonuje sie dalej. Jesli chcemy np zobaczy cos znajduje sie w Memo1.Lines.Strings[i]; to nalezy kursorem najechac na ']' i po chwili powinna nam sie pojawic wartosc linii. Podobnie jest w tablicach.

Innym problemem jest gdy nie zabardzo wiemy gdzie znajduje sa blad. Mamy dluga funkcje i nie chcemy stawiac Breakpointow na slepo. Mozemy sie posluzyc sprawdzaniem kodu linia po linii. Uruchamiamy program tylko zamiast F9 naciskamy F7 i program startuje pokazujac nam co w danej chwili jest robione. Gdy juz sie napatrzelismy to naciskamy ponownie F7 i przeskakuje nam do nastepnej linii. Tak linia po linii mozemy ogladac sobie nasze zmienne jak zmieniaja sie ich wartosci wraz z dzialaniem programu. No moze wam sie wydawac ze juz teraz mozemy wszystko ogladac podgladac i w ogole byc wielkiem bratem ale co jak program ma jakies 10000 linijek? Chcialoby wam sie naciskac tyle razy F7 gdy zalezy wam tylko na jednej funkcji? No wlasnie i dlatego czasami warto jednoczesnie uzywac Breakpointow i sprawdzania kodu linia po linii. W takim wypadku najlepiej postawic punkt kontrolny na samym poczatku interesujacej nas funkcji a potem tylko naciskac F7 i tak mozna przesledzic dzialanie okreslonej funkcji.

To chyba na tyle jesli chodzi o podstawy obslugi debuggera. W Delphi jest on rownie waznym narzedziem co kompilator i nalezy umiec z niego kozystac. No i tak dobiegl konca moj artykul o szukaniu bledow w kodzie.

5 komentarzy

Tekst bardzo użyteczny (stwierdzenie początkującego :)), zwłaszcza z komentarzem tjanusza. Prośba: podajcie miejsce, w którym powinnam szukać większej liczby informacji na ten temat, ok?

Edit: mogłabym prosić o szersze objaśnienie, jak dostać się do wartości zmiennych?

Bez kompentarza...:-)

popieram bardzo przydatny i przedewszystkim dobry artykuł!!

Polskie litery po coś są. Poza nimi, zastrzeżeń nie mam - wytłumaczone dość dobrze, od strony praktycznej. Nawet początkujący zrozumie i użyje debuggera na podstawie tego tekstu.

A to mnie zaskoczyłeś. Do czasu przeczytania tego artu myślałem, że używanie debuggera jest normalką podczas programowania.
Ale jeśli już bierzesz się za temat to do końca. To co napisałeś jest w porządku, ale mogłeś dodać coś o innych przydatnych funkcjach jak np. klawiszu F4 - wykonującym program do linijki z kursorem (coś jak "breakpointy") czy F8 - wykonującym wywoływaną funkcję jako jedno polecenie (oszczędza czas i palce).
Debugowanie w instrukcjach asmu to wyższa jazda, ale też się przydaje. Szczególnie gdy program sypie się na linijce w której jest tylko słowo 'end;'
Ale tak w ogóle to podziwiam ludzi którzy walczyli z błędami bez debuggera.