Debuggerin avulla voidaan seurata ohjelman suoritusta rivi kerrallaaan ja tarkastella ohjelman tilaa (muuttujien arvoja). Näin on usein helpompi löytää ohjelman virhekohtia kuin vain katsomalla koodia.
Harjoitellaan debuggerin käyttöä esimerkin avulla. Haetaan ensin hieman tarkasteltavaa koodia tästä. Tallenna tiedosto jonnekin, mistä löydät sen myöhemmin, älä kuitenkaan Eclipsen workspace-hakemistoon. Kotihakemistosi käy hyvin.
Tuo paketin sisältämät pydev-projektit eclpise-ympäristöösi seuraavasti:




Tarkastellaan ensin projektia debug1. Tässä projektissa on yksi moduli, debug1.py. Avaa se.
Voit ajaa ohjelman - sen pitäisi tulostaa jotain tällaista
Tarkastellaan nyt ohjelman toimintaa debuggerin avulla. Jotta tämä onnistuisi, on ensin
asetettava ainakin yksi keskeytyskohta (breakpoint). Tämä tarkoittaa riviä, jolle tultaessa ohjelman
suoritus keskeytetään. Asetetaan keskeytyskohta main-funktion ensimmäiselle riville kaksoisklikkaamalla
rivin vasemmalla puolella olevaa harmaata aluetta. Rivin kohdalle ilmestyy vihreä merkki ilmaisemaan
keskeytyskohtaa. Keskeytyskohdan voi vastaavasti poistaa kaksoisklikkaamalla sitä uudelleen.
Käynnistetään ohjelma nyt debug-tilassa valitsemalla Run-valikosta Debug As -> Python Run

Debuggerilla kestää hetki käynnistyä. Kun ohjelma tulee riville, jossa on keskeytyskohta, ponnahtaa esiin
ikkuna, johon on syytä vastata Yes. Eclipse siirtyy nyt Debug-näkymään, joka on seuraavanlainen:
Keskellä vasemmalla on koodi-ikkuna. Rivi, jolla ollaan on korostettu vihreällä, ja lisäksi vasemmalla puolella
on nuoli osoittamassa ko. riviä. Oikealla ylhäällä näkyy muuttujat ja niiden arvot. Tässä vaiheessa ei ole vielä
määritelty mitään muuttujia, joten muuttujaikkuna on tyhjä (Globals-kohdasta ei kannata välittää). Siirytään
seuraavalle riville painamalla F6 (vaihtoehtoisesti voi valita Run valikosta Step Over, mutta näppäimistön
käyttäminen on kätevämpää). Nyt näkymä muuttuu seuraavaksi:
Nyt muuttujaikkunaan tuli näkyviin uusi muuttuja x sekä sen arvot. Koska x on lista, pääsee näkemään myös sen alkioiden arvoja. Uudet tai muuttuneet muuttujat korostetaan keltaisella.
Suoritetaan loputkin rivit painamalla F6 kunkin rivin kohdalla. Huomaa, millä riveillä x:n arvo vaihtuu ja millä ei. Funktion viimeisellä rivillä pitää painaa F6 vielä toisen kerran, jotta funktiosta poistutaan.
Poistetaan nyt keskeytyskohta main-funktiosta (kaksoisklikkaamalla) ja lisätään keskeytyskohta funktion func2
ensimmäiselle riville, ja käynnistetään ohjelma jälleen debug-tilassa. Kun ohjelma on pysähtynyt func2-funktion
ensimmäiselle riville, voidaan muuttujaikkunasta nähdä, millä arvoilla (a ja b) funktiota on kutsuttu. Nytkin
voitaisiin käydä ohjelmaa rivi riviltä läpi, mutta asetetaan kuitenkin uusi keskeytyskohta funktion func2
viimeiselle riville (älä kuitenkaan poista ensimmäistä), ja jatketaan ohjelman suoritusta F8-näppäimellä. Nyt
ohjelma jatkaa suoritustaan seuraavaan keskeytyskohtaan saakka ja pysähtyy jälleen. Tilanteen pitäisi siis näyttää
seuraavanlaiselta:


Huomataan, että edellisestä pysäytyksestä on tullut kaksi uutta muuttujaa: i, jossa on kokonaislukuarvo 9, sekä x, joka on lista. Kun painetaan F8-näppäitä uudelleen (kaksi kertaa, sillä kun on pysähdytty funktion viimeiselle riville, on painettava jatkonäppäintä ylimääräisen kerran), ohjelma pysähtyy seuraavan kerran seuraavaan funktion func2 kutsuun. Tällä kertaa muuttujilla a ja b on eri arvot, ja samaten muuttujille i ja x tulee eri arvot.
Kokeillaan vielä funktiokutsun sisään siirtymistä. Aiemmassa esimerkissä vain suoritettiin ohjelmaa rivi
kerrallaan, mutta entäs jos rivillä kutstutaan funktiota ja halutaan nähdä, mitä funktion sisällä tapahtuu.
Käynnistetään ohjelma vielä kerran debug-tilassa. Olettaen, ettet koskenut keskeytyskohtiin tässä välissä, ohjelman
pitäisi pysähtyä funktion func2 alkuun. Suoritetaan funktion ensimmäiset kolme riviä F6-näppäimellä.

Neljännellä rivillä kutsutaan funktiota func1 ja funktiota func3. Siirrytään funktiokutsun sisään
F5-näppäimellä (Run -> Step Into). Huomataan, että päädyttiin funktioon func3. Funktiota func3 kutsutaan rivillä
siis ensin (tämän voi toki päätellä siitä, että koska funktion func3 arvo annetaan argumenttina funktiolle func1,
func3 pitää suorittaa ensin). Muuttujaikkunasta nähdään, että funktiota func3 kutsuttiin i:n arvolla 0

Siirrytään eteenpäin F5-näppäimellä (F5 toimii kuten F6 paitsi silloin, kun rivillä
kutsutaan funktiota) - huomaa taas, että näppäintä on painettava kahdesti, sillä ollaan funktion viimeisellä rivillä.
Nyt päädytään funktioon func1.
Muuttujaikkunasta nähdään, että funktiota kutsuttiin a:n arvolla 1 ja b:n arvolla "elefantti". Ohjelman suoritusta
voi edelleen seurata näppäimillä F5, F6 ja F8. Ohjelman suorituksen voi myös pysäyttää punaisesta stop-merkistä:

Huomaa, että Eclipse jää debug-näkymään. Päästäksesi takaisin normaaliin näkymään valitse Window -> Open Perspective -> Other... ja avautuvasta ikkunasta Pydev.
Nyt olet saanut vähän tuntumaa debuggerin käyttöön. Katso seuraavaksi käytännön esimerkki.