Jak debugować programy w języku C?

Jeśli Twój program kompiluje się, kończy pracę lub wykonuje się nieprawidłowo, prawie na pewno wystąpił błąd (defekt) w twoim programie.
Spora część twojego czasu programowania zostanie poświęcona na znalezienie i usunięcie tych błędów.
Tutaj pokrótce podamy niezbędne wskazówki, które pomogą Ci zacząć proces szukania ewentualnych błędów. Pamiętać należy jednak, że proces debugowania jest tyleż samo sztuką, co informatyką i oczywiście, im więcej ćwiczysz programowanie, tym łatwiejsze będzie debugowanie!

r_1_C

Często program kompiluje się i wykonuje dobrze, ale z wynikami, których się nie spodziewałeś (listing 1).

list_1
Na przykład następujący program i jego dane wyjściowe przedstawione na rysunku 1 kompilują się i wykonują bez błędu, ale dane wyjściowe są nieczytelne lub, innymi słowy, nie są tym, czego należało oczekiwać. Czy widzisz, gdzie jest problem z formatowaniem lub są problemy?
Czego brakuje i gdzie należy umieścić korektę lub poprawki?

r_2_C

Następny blok kodu i jego wynik pokazany na rysunku 2 koryguje problemy z formatowaniem odpowiednio rozmieszczonymi sekwencjami ucieczkowymi (escape sequences – listing 2).

list_2
Problemy z formatowaniem są częste w początkowym programowaniu i zwykle szybko są rozwiązywane przez ćwiczenie funkcji printf() i różnych sekwencji ucieczki.
Innym częstym typem błędu jest błąd logiczny, w tym pętla, która nie kończy się, gdy oczekiwano, niepoprawne równanie matematyczne, lub może wadliwy test na równość (warunek).
Pierwszym krokiem w debugowaniu błędu logicznego jest znalezienie pierwszego wiersza, w którym istnieje błąd programu.
Jednym ze sposobów na to jest użycie instrukcji print, używając funkcji printf(), rozproszonej przez twój kod.
Na przykład możesz zrobić coś takiego w swoim kodzie źródłowym (listing 3):

list_3
Funkcja fflush () zapewnia, że instrukcja print zostanie natychmiast wysłana na twój ekran i powinieneś jej użyć, jeśli używasz printf() do celów debugowania.
Parametr stdout przekazywany do funkcji fflush () jest standardowym wyjściem, zazwyczaj jest to ekran komputera.
Po zawężeniu poszukiwań do linii lub funkcji, w której występuje błąd logiczny, następnym krokiem jest ustalenie wartości zmiennych w tym czasie.
Możesz także użyć funkcji printf(), aby wydrukować wartości zmiennych, co pomoże ci znacznie w określeniu źródła nieprawidłowego zachowania programu.
Wyświetlanie wartości zmiennych za pomocą funkcji printf() zostanie szczegółowo omówione w odrębnym materiale.
Pamiętać należy, że po naprawieniu każdego błędu musisz ponownie skompilować swój program, uruchomić go i ponownie przeprowadzić debugowanie, jeśli to konieczne.
Początkujący programiści będą częściej niż zaawansowani, napotykać błędy kompilacji, a nie błędy logiczne, które są na ogół wynikiem problemów składniowych, takich jak brakujące identyfikatory i terminatory lub nieprawidłowe dyrektywy, sekwencje specjalne i bloki komentarzy.
Debugowanie błędów kompilacji może być trudnym zadaniem, zwłaszcza, gdy zobaczysz 50 lub więcej błędów na ekranie komputera.
Należy pamiętać, że pojedynczy błąd u góry programu może powodować kaskadę błędów podczas kompilacji.
Nie trzeba dodawać, że najlepszym miejscem do rozpoczęcia debugowania błędów kompilacji jest pierwszy błąd na liście! W następnych wpisach omówimy niektóre z bardziej typowych błędów kompilacji, rozpoczynając od doświadczenia programisty C. 

pełny materiał w pliku pdf

Komentarze z Facebooka

Komentarze obecnie - OFF.