(Valitettavasti leveät kuvat eivät toimi kovin hyvin yhteen noppa-järjestelmän kanssa. Tämä opas on myös nähtävissä vähemmillä muotoiluilla täällä.)
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.