Silumine (debug)¶
Silumist kasutatakse programmist vigade tuvastamiseks. Silumine võimaldab jälgida programmi mälu seisu (muutujate väärtus, käivituva rea numbrit jms) teatud ajahetkel. Näiteks on võimalik programmi jooksutada samm (rida) haaval ja vaadata, mis toimub mälus. Silumist saab kasutada ka selleks, et koodi töötamisest aru saada.
Vaata ka alljärgnevat videot koodi silumisest.
Silumist saab teostada mitmel moel. Üks võimalus on kasutada print
funktsiooni ning selle abil kuvada ekraanile mõne muutuja väärtus.
Näiteks kasutame lihtsat koodi:
string = "tere"
for i in range(10):
string += string[:i // 2:2]
print(string)
Kui panete programmi käima, näete tulemust teretttttrtrtrtr
. Miks
selline tulemus tuleb?
Lisame koodi ühe print
väljakutse:
string = "tere"
for i in range(10):
print(f"s:{string}, i:{i}, i//2:{i // 2}, +:{string[:i // 2:2]}")
string += string[:i // 2:2]
print(string)
Nüüd saame tulemuse:
s:tere, i:0, i//2:0, +:
s:tere, i:1, i//2:0, +:
s:tere, i:2, i//2:1, +:t
s:teret, i:3, i//2:1, +:t
s:terett, i:4, i//2:2, +:t
s:terettt, i:5, i//2:2, +:t
s:teretttt, i:6, i//2:3, +:tr
s:teretttttr, i:7, i//2:3, +:tr
s:teretttttrtr, i:8, i//2:4, +:tr
s:teretttttrtrtr, i:9, i//2:4, +:tr
teretttttrtrtrtr
See võimaldab meil jälgida, mis on igal sammul string
, i
,
i // 2
ja liidetava alamsõne väärtused.
Mõned probleemid sellise lahendusega:
print(...)
peab olema enne koodi käivitamist valmis pandudKeset programmi jooksmist ei ole võimalik vahetada kus, millal ja mida välja prinditakse
Pärast vea avastamist on väga tülikas hakata
print(...)
-e kustutamaEi ole võimalik vaadata, kust mingi väärtus tuleb, kust kuhu koodis liigutakse jne
Selline silumine toimib üldiselt igas keskkonnas ning väikeste koodide puhul sellest piisab. Mahukama ja keerulisema koodi puhul oleks mõistlik kasutada mõnda silumisvahendit. Näiteks PyCharmi on üks selline sisse ehitatud.
Silumine PyCharmis
Sarnaselt teistele IDE-dele, saab PyCharmis määrata katkestuspunkti (breakpoint) klikkides koodirea ees oleval hallil osal (kus on reanumbrid). Sinna peaks ilmuma punane ring.
See tähistab seda, et kui koodi käivitamine silumisrežiimis jõuab sellele reale, pannakse programm seisma ning antakse võimalus hetkeseisu jälgida.
Silumisrežiimi käivitamiseks tuleb menüüst valida Run -> Debug või hiirega parem klikk koodiaknas -> Debug ‚failinimi‘.
Silumisrežiimis ilmub nähtavale eraldi vaade, millega saab mäluseisu vaadelda ning programmi töötamist kontrollida. Kui koodis pole ühtegi katkestuspunkti, töötab silumisrežiim sarnaselt tavalise käivitusrežiimiga - terve programm jooksutatakse algusest lõpuni läbi.
Kui silumisrežiim jõuab kaktestuspunktini, pannakse programmitöö ootele. Koodiaknas on aktiivne rida (esialgu katkestuspunkti rida) eraldi märgistatud. Silumise paneelil (vaikimisi avaneb akna alumises osas) näidatakse automaatselt välja kõik antud hetkel väärtustatud muutujad. Sinna saab soovi korral lisada muutujaid või avaldisi.
Programmi edasist juhtimist saab kontrollida nuppudega silumisrežiimi paneeli ülaosas. Sealsed valikud:
Step over - liigub antud faili järgmisele reale (kui sellel real kutsutakse välja mõni funktsioon, siis selle sisse ei liiguta)
Step into - liigub koodis edasi järgmisele käivitatavale reale (kui sellel real kutsutakse välja mõni funktsioon, siis liigutakse selle sisse)
Step into my code - liigub koodis edasi järgmisele kasutaja kirjutatu reale (väliste teekide koodiread jäävad vahele)
Step out - liigub esimesele koodireale peale antud meetodi/funktsiooni/tsükli käivitamist
Run to cursor - liigub edasi tekstikursorini
Vasakul on nupud:
Rerun - käivitatakse silumisrežiim algusest
Resume program - jätkatakse programmi käivitamist kuni järgmise katestuspunktini (või lõpuni, kui katkestuspunkte pole)
Viiteid
Online Python Visualizer: http://www.pythontutor.com/visualize.html