Debugowanie błędu logiki programu

Skoro tak dużo już potrafisz otrzymujesz zadanie zdebugowania nowej wersji zaawansowanego programu do inwentaryzacji kotów🤩 Oto jego kod:

# Cats inventory advanced manager
print("Starting program")

print("Preparing data")
cat1 = "Kitty"
cat2 = "Pussy"
cat3 = "Paw"

print("Initialising cats list")
cats = []
print(f'cats list contains: {cats}')

print("Adding cats to list")
cats.append(cat1)
print(f'cats list contains: {cats}')
cats.append(cat2)
print(f'cats list contains: {cats}')
cats.append(cat3)
print(f'cats list contains: {cats}')
cats.clear()

print("Returning list")
print(cats)


Zastąp obecny skrypt tym kodem.

TIP: Aby poprawnie skopiować powyższy kod użyj opcji, która pojawi się po najechaniu myszką na pole z kodem:
breakpoint w kodzie
TIP: Nawet jak od razu widzisz, że co jest nie tak w powyższym kodzie to zachęcamy do przejścia poniższego zadania aby rozpoznać problem za pomocą debugowania 😋

Problemy

Zaobserwowano pewien niewielki bug w programie a programista za pieniądze z tego projektu już od dawna imprezuje na Hawajach i nie za bardzo odpowiada na telefony😎 Ale na szczęście mamy Ciebie.

Wyłącz wszystkie breakpointy i uruchom program. Powinieneś otrzymać taki wynik:

Starting program
Preparing data
Initialising cats list
cats list contains: []
Adding cats to list
cats list contains: ['Kitty']
cats list contains: ['Kitty', 'Pussy']
cats list contains: ['Kitty', 'Pussy', 'Paw']
Returning list
[]

Na końcu widzimy tylko pustą listę [ ], bez naszych kochanych kotków 😥

Program wykonał się poprawnie, co oznacza, że sam kod jest poprawny pod względem jego składni. Mamy tutaj inny błąd niż poprzednio i jest on związany z oczekiwaną wartością produkowaną przez program. Czyli program działa ale nie tak jak chcemy.

Mini Teraz Ty – debugowanie

Postaw breakpoint na początku programu i wykonuj kolejne kroki (idealnie za pomocą klawisza F8). Obserwuj zmieniającą się listę cats.

Czy potrafisz wskazać linię po której wykonaniu nastąpiła niepożądana zmiana?

Mini Rozwiązanie – debugowanie

Przechodzimy debuggerem, aż do wykonania lini cats.clear() w debuggerze. W panelu Debug (w zakładce Debugger w widoku Variables) widzimy zmienne z kotami (cat1, cat2, cat3) i wypełnioną listę cats:

cat1 = {str} 'Kitty'
cat2 = {str} 'Pussy'
cat3 = {str} 'Paw'
cats = {list: 3} ['Kitty', 'Pussy', 'Paw']

Po wykonaniu przy pomocy debuggera linii cats.clear() nasza zmienna cats ulega zmianie:

cat1 = {str} 'Kitty'
cat2 = {str} 'Pussy'
cat3 = {str} 'Paw'
cats = {list: 0} []

W ten sposób odnaleźliśmy linię, odpowiedzialną za kłopoty.

Poprawa i wnioski.

Komentujemy psującą nasz program linię tak aby przestała być wykonywana:

#cats.clear()

Rozpocznij debug od nowa. Tym razem debugowanie powinno wykazać, że lista zawiera oczekiwane elementy.

Jak widzisz nie musiałeś znać dokładnie co robią poszczególne operacje na liście takie jak append() czy clear(). Mogłeś wykazać ich wpływ na program dzięki debugowaniu.

Oczywiście jest to najbardziej uproszczony przypadek. Najważniejszą lekcja jaką powinieneś wynieść z tego ćwiczenia jest taka, że za pomocą debugowania jesteś w stanie dotrzeć do powodu problemu. Wtedy jesteś w stanie odpowiednio zgłosić błąd, uzyskać pomoc, bądź samodzielnie próbować rozwiązać problem.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *