Programista bez debuggera, to jak mechanik bez klucza… to trzeba mieć!
Ostatnio bardzo popularnym narzędziem do tworzenia skryptów w Pythonie jest Jupyter Notebook. Niestety domyślnie menu nie ma polecenia debug… o ile w pojedynczych komórkach po prostu wykonujesz mało skomplikowane polecenia, to ewentualne dodanie polecenia print powinno pomóc i rozwiązać problem. Co jednak zrobić jeżeli masz nieco bardziej złożoną pętlę i coś w niej nie działa?
W charakterze kłopotliwego kodu wystąpi u nas taka pętla:
i = 1 while i < 10: print(i) i += 3 if i % 2 == 0: i -= 2 print('done i={}'.format(i))
W sumie - nic skomplikowanego, ale zmienna sterująca i jest raz zwiększana, raz zmiejszana... idzie się pogubić, zwłaszcza po drinku.
W celu debuggowania w trybie "znakowym" wykonaj takie czynności:
- załaduj moduł pdb:
import pdb
- a następnie w miejscu, gdzie chcesz aby zatrzymał się program dodaj linijkę:
pdb.set_trace()
Czyli nasza kłopotliwa pętelka może teraz wyglądać tak:
import pdb i = 1 while i < 10: print(i) i += 3 if i % 2 == 0: pdb.set_trace() i -= 2 print('done i={}'.format(i))
Po uruchomieniu w/w kodu, kiedy wykonanie dotrze do linijki
pdb.set_trace()
program zatrzyma się prezentując proste pole do wprowadzenia instrukcji:
jeśli wpiszesz "i" i naciśniesz enter, to debugger wyświetli w odpowiedzi aktualną wartość i. W okienku możesz też podawać bardziej skomplikowane wyrażenia, np sprawdzać ile wynosi i % 2 lub czy i %2 == True itp.
Kiedy chcesz aby zostało wykonane kolejne polecenie wystarczy nacisnąć n i enter. A kiedy masz już dosyć przetwarzania linijka po linijce naciśnij c i enter
Można też wpisać help, na co debugger odpowie listą dostępnych poleceń, lub wpisać help <nazwa_komendy> i wtedy zobaczysz opis polecenia:
Nasza sesja debuggowania mogłaby więc koniec końców wyglądać tak: