Programowanie w języku Pascal

Jak najlepiej szukać błędów

Pewnie jak każdy z programistów masz potężnego wroga - błędy. To tak samo jak ja :). Najlepiej wypiszę wszystko w punktach:
1. Jesli używasz Turbo Pascala, masz duże szanse na "przeżycie" przygody z błędami. Mimo to, czasami nawet TP nie pomoże. Oto kilka błędów i ich wyjaśnienie(jeśli to wszystko wiecie to proszę mnie nie obsypywać oczywistymi komentarzami):
Kod żródłowy:
Program Blad1;
Uses Crt;
Var 
  Liczba: Integer;
 
begin
  { bliżej nie opisane działania }
  Liczba:=Liczba+1; { Tu jest błąd! }
end.

Myśli użytkownika niewtajemniczonego(i zbyt leniwego na dokładne sprawdzenie problemu :)):

CO??!!
Zaraz, zaraz, przypisanie się zgadza! Więc co się nie zgadza? Głupie pudło! Tyle czasu pracy i ten mi robi złośliwe uwagi tylko dlatego, że dobrze przypisałem! PHI!

Rozwiązanie: Zainicjuj zmienną Liczba!
Porada: Zawsze, gdy piszesz program, który jest długi, a w dodatku najbliższa operacja związana z daną zmienną jest więcej niż 15 linii od początku, zaraz po Begin zainicjuj ją jakąś wartością.

Kod źródłowy:
Program Blad2;
Uses Crt, Graph;
Var 
  Liczba: Integer;
begin
  { bliżej nie opisane działania }
  InitGraph(...); { błąd! }
end.

Rozwiązanie: TP nie zgłosił Ci tym razem błędu w Uses, bo zakładam, że biblioteka Graph istnieje. Dlatego też nie szukaj błędu od Begin, ale od samiuteńkiego początku.
Porada: Po każdym zdaniu sprawdzaj, czy zawiera ono to, co chciałeś.
2. Przepisy na szukanie błędów są bardzo mnogie:
- Szukaj najpierw w linii wskazanej przez kompilator, później deklaracje zmiennych, potem deklaracje procedur; wreszcie inne rzeczy.
- Jeśli szukasz, szukasz aż do końca programu, zachowaj kolejność procedury ratunkowej:
Uses Inteligecja;
Procedure Ratunek;
begin
  Rozum_Po_Polsku;
  Mów_Po_Polsku;
  Powiedz('Najpierw przeszukaj raz następny,');
  Powiedz('Potem napisz program od nowa');
end;
:D
3. Sprawdź wersję kompilatora - niektóre są po prostu za stare na pewne rzeczy.
4. Czwartego punktu nie ma. Adiqwo wszedł do akcji i wyszedł z dumą :)

 

8 komentarzy

TKW 2004-09-05 15:40

Słowa kluczowe nie powinny być zaznaczone w ciągach.

flabra 2004-03-14 06:12

Większośc srodowisk ma debuggery zintegrowane... breakpoints/step in/trace over/watches/evaluate-modify... poza tym metoda tu_doszedlem (w wywaleniem na ekran wazniejszych danych)

Deti 2003-10-28 16:59

Troszkę to krótkie :/ - ale fajne... PS: w moim przypadku jest podobnie jak z Drajwerem... "tu doszedłem" :) - w Delphi robię "showmessage" i wszystko jasne :)

adiqwo 2003-10-28 15:11

Przepraszam - po prostu to mój pierwszy artykuł - nie miejcie mi tego za złe.

adiqwo 2003-10-28 15:08

Aha. Spróbuję dorzucić opis debuggera!

ŁF 2003-10-27 20:18

TP inicjalizuje wszystkie zmienne globalne, dlatego przytoczony przykład jest błędny.
Używaj kolorowania składni (< delphi >< /delphi > ) i wcięć w kodzie.
Całość trochę mętnie napisana. Może dorzuć instrukcję obslugi debuggera?

Drajwer 2003-10-27 19:18

ja tam sobie robie writeln('tu doszedlem'); (jezeli juz jestem w tp) po kazdej nie pewnej linii :)
// debugger prawdę Ci powie, poza tym gdy program wywala się pod kontrolą IDE, dowiesz się w której linijce wystąpił błąd - ŁF.

adiqwo 2003-10-27 16:51

Hehe, i co, boicie się błędów nadal? :)