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.
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.