Jak najlepiej szukać błędów

adiqwo

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

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

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)

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 :)

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

Aha. Spróbuję dorzucić opis debuggera!

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?

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.

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