Debagovanje znači pronaći uzrok, a ne nasumično isprobavati ispravke.
Pisanje koda je jedan zadatak. Pokretanje programa pokazuje šta on zaista radi. Debagovanje počinje kada je to ponašanje neočekivano: ponovi problem, posmatraj tragove, pronađi uzrok, napravi malu ispravku i proveri rezultat.
Reproduce → Observe → Find the cause → Fix → Verify
1. Run the same input that shows the problem.
2. Read the error message or compare the actual result with the expected result.
3. Form a small hypothesis and inspect the relevant line or value.
4. Change only what is needed.
5. Run the program again and check for new problems.Na primer, ako je cena previsoka, nemoj odmah prepisati ceo obračun. Najpre ponovi problem sa istom cenom i popustom, posmatraj međuvrednosti, a zatim proveri formulu koja je dala neočekivani rezultat.
Dobar postupak debagovanja menja jednu ideju odjednom. Tako je lakše utvrditi da li je izmena rešila pravi uzrok ili samo sakrila simptom.
Počni od dokaza: Poruka o grešci, traceback, iznenađujući rezultat i vrednost promenljive su tragovi. Svaki trag sužava deo programa koji vredi istražiti.
# Syntax error
if cena > 100
print("Skupo")
# Runtime error
cena = 100
kolicina = 0
print(cena / kolicina)
# Logic error
cena = 100
popust = 20
nova_cena = cena + cena * popust / 100
print(nova_cena)Prvi primer ima SyntaxError zato što liniji if nedostaje dvotačka. Drugi tokom izvršavanja podiže ZeroDivisionError. Treći program radi, ali dodavanje popusta povećava cenu: to je logička greška, zato traceback možda uopšte neće postojati.
Traceback (most recent call last):
File "main.py", line 5, in <module>
rezultat = 100 / 0
ZeroDivisionError: division by zeroTraceback (most recent call last) uvodi istoriju poziva. Ime fajla i broj linije pokazuju gde je Python primetio izuzetak. Poslednja linija navodi izuzetak i njegovu poruku. U većem programu raniji stack frame može sadržati odluku koja je dovela do pogrešne vrednosti, zato je traceback koristan trag, a ne potpuno objašnjenje.
cena = 200
popust = 10
iznos_popusta = cena * popust
print("DEBUG:", iznos_popusta)
nova_cena = cena - iznos_popusta
print(nova_cena)
# Correct calculation:
iznos_popusta = cena * popust / 100Privremeni DEBUG ispis otkriva da je iznos popusta 2000 umesto 20. Deljenje procenta sa 100 ispravlja formulu. Ukloni privremene DEBUG ispise nakon istraživanja kako kasnije ne bi postali zbunjujući izlaz.
1. Open the Python file and choose the correct interpreter.
2. Click left of a line number to add a breakpoint.
3. Start Run and Debug or press F5.
4. If asked, choose Python File debugging with the Python extension installed.
5. The program stops before it executes the breakpoint line.Breakpoint zaustavlja program na izabranom mestu da bi mogao/la da pregledaš njegovo stanje. Raspored VS Code-a i prečice na tastaturi mogu se razlikovati zbog operativnog sistema ili podešavanja, pa su dugmad debugger toolbar-a uvek dobra alternativa.
def cena_sa_popustom(cena: float, popust: float) -> float:
iznos_popusta = cena * popust / 100
nova_cena = cena - iznos_popusta
return nova_cena
print(cena_sa_popustom(200, 10))Postavi breakpoint na prvu liniju unutar funkcije. U panelu Variables najpre pregledaj cena i popust. Step Over izvršava jednu liniju bez ulaska u pozvanu funkciju; Step Into ulazi u funkciju kada je to moguće; Step Out nastavlja dok se trenutna funkcija ne završi; Continue radi do sledećeg zaustavljanja. Posmatraj kako se iznos_popusta i nova_cena pojavljuju tokom izvršavanja.
Praktična strategija debagovanja
- 1. Ponovi problemKoristi isti ulaz ili radnju koja prikazuje grešku. Problem koji ne možeš da ponoviš teže je istražiti.
- 2. Pročitaj tragPažljivo pročitaj traceback, tip greške ili stvarni rezultat. Kod logičke greške zapiši koji rezultat si umesto toga očekivao/la.
- 3. Postavi pretpostavkuPostavi jedno usmereno pitanje, kao što je „Da li je kolicina ovde nula?“ ili „Da li sam procenat koristio/la kao ceo broj?“
- 4. Pregledaj stanje programaDodaj privremeni
print()ili se zaustavi na breakpointu. Proveri vrednosti i redosled kojim se linije izvršavaju. - 5. Napravi jednu ciljanu izmenu i proveri jePonovo pokreni isti scenario. Potvrdi i da je prvobitni problem ispravljen i da izmena nije napravila novi.
Navike debagovanja koje treba izbegavati
- Menjanje mnogo linija odjednomViše izmena može sakriti koja je pomogla ili uvela novu grešku. Neka svaki pokušaj bude mali.
- Čitanje samo poslednje reči poruke o grešciTip izuzetka, fajl, broj linije i okolni kod daju koristan kontekst.
- Ostavljanje ispisa za debagovanje u završnom programuPrivremeni ispisi su korisni tokom istraživanja, ali ih zatim ukloni ili zameni namernim izlazom programa.
