The referenced paragraph does not exist.

Pääteohjaus 5

Tässä harjoituksessa harjoitellaan debuggerin käyttöä Visual Studiossa. Opetellaan seuraavat asiat:

  • askeltaminen, askeltamien aliohjelman sisään (Step In) ja suorittaen aliohjelma kokonaisuutena (Step Over)
  • keskeytyskohdan (Breakpoint) laittaminen ja ajaminen siihen
  • lokaalien muuttujien (Locals) seuraaminen

Kun otat esimerkkikoodeja, niin niissä näkyy rivinumerot. Rivinumerottoman version saat, kun painat alareunassa Original Format ja oikealla napilla "Save Link As".

Jos osaat jo debuggerin käytön hyvin tai haluat tehdä harjoituksen kotona, niin OK, siirry tekemään demoja. Mutta tee tämä harjoitus joka tapauksessa tällä viikolla ja käytä sen oppeja omissa demotehtävissä ja harkassa. Alla olevia asioita kysytään debuggausnäytteessä.

Versionhallinta (svn)

Jos et edellisessä ohjauksessa vielä tutustunut versionhallintaan, tee se nyt. Erityisesti, jos sinulla ei vielä ole omaa kansiota svn:ssä, voit tehdä sen kohdan 1.1 ohjeilla.

1. Debuggaus

Lue monisteen luku 10.3 Debuggaus. Katso tehtävää tehdessä myös Wiki-sivua debuggaus.

2. Askeltaminen debuggerissa ja lokaalit muuttujat

Aluksi harjoitellaan askeltamista eri tavoin. Samoin opetellaan seuraamaan lokaaleja muuttujia.

  • Tee uusi Solution (vaikkapa nimelle Demo5) ja projekti 'Debuggaus' (Console Application).
  • Copy-pasteta sinne Kolmion ala-esimerkin sisältö. Luokkamäärittelyä ja using-lauseita älä kopioi.
  • Paina F11 tai klikkaa Debug -> Step into (suomeksi askella). Ohjelma käynnistyy debuggaustilaan. Keltainen nuoli vasemmalla näyttää, mitä koodiriviä seuraavaksi suoritetaan.
  • Paina uudestaan F11. Askellettiin riville 12. Alhaalla näkyy 'Locals'-paneeli, jossa on paikalliset muuttujat. (Jos Locals-paneelia ei näy, sen saa esille valitsemalla yläpalkista Debug -> Windows -> Locals.) args-taulukon alapuolella on kanta, korkeus ja ala, joiden arvo on tällä hetkellä 0.0.
  • Paina taas F11. Ollaan rivillä 13. Kanta-muuttujan arvoksi muuttui 5.0. Visual Studio näyttää viimeksi muuttuneen arvon punaisella.
  • Paina niin kauan F11, että tullaan KolmionAla-aliohjelmakutsuun. Kun vielä kerran painat F11, hypätään riville 28 ja KolmionAla-aliohjelman sisään. Huomaatko, että Locals-paneeli muuttui, siellä ei enää ole samoja muuttujia kuin Main-aliohjelmassa ollessamme (nyt emme enää ole Mainissa).
  • Huomaa myös, että rivi, jolta pomppasimme KolmionAla-aliohjelman sisään, on nyt harmaana. Näin ohjelma tietää, mille riville palataan sen jälkeen, kun KolmionAla-aliohjelman suoritus loppuu.
  • Sama asia selviää myös Locals-paneelin oikealla puolella olevasta Call Stack (kutsupino) -paneelista. Se ohjaa ohjelman suoritusta. Ylimpänä oleva asia suoritetaan seuraavaksi, ja alempana olevat asiat sen jälkeen.
  • Paina F11 niin kauan että tullaan KolmionAla-aliohjelman viimeiselle riville. Mitä luulet tapahtuvan kun vielä kerran painat F11? Ennen painamista mieti, mihin keltainen nuoli seuraavaksi osoittaa.
  • Klikkaa F11 niin kauan, että tullaan Console.ReadKey()-riville, ja vielä kerran 'F11'. Tässä vaiheessa käyttäjältä vaaditaan toimenpiteitä. Painettuasi jotain näppäintä palataan debuggaus-tilaan.
  • Paina F11 niin kauan että ohjelman suoritus päättyy.
  • Kokeile tehdä sama homma uudestaan. Pysytkö kärryillä ohjelman suorittamisessa? Erityisen tärkeitä ovat Locals-paneeli ja Call Stack.
  • Jos haluat keskeyttää debuggauksen, paina Shift + F5 tai stop-painike Visual Studiossa.
  • Aloita vielä kerran ohjelman suoritus painamalla F11. Tullessasi KolmionAla-aliohjelmakutsun kohdalle (rivi 16), paina F10 (Debug -> Step over). Mitä tapahtui? Osaatko selittää toiminnon nimen "Step over" ja tapahtuneen välisen yhteyden?

3. Keskeytyskohta (break point)

Harjoitellaan keskeytyskohdan lisäämistä ja ajamista keskeytyskohtaan.

  • Tee äsken luomaasi solutioniin uusi projekti Debuggaus2 painamalla Solutionin nimen päällä hiiren oikeaa ja sitten Add New Project.
  • Muuta Program.cs-tiedoston nimeksi Jarjesta.cs
  • Kopioi esimerkkitiedoston Jarjesta.cs lähdekoodi ja liitä se juuri tekemääsi kooditiedostoon
  • Lue ohjelman kommentit läpi.
  • Laita keskeytyskohta (breakpoint) riville, jossa lukee Jarjesta2(luvut). Keskeytyskohta laitetaan klikkaamalla koodi-ikkunan vasempaan reunaan, harmaalle alueelle.
  • Laita ohjelma käyntiin (F5). Ohjelman ajo keskeytyy debuggaus-tilaan riville 54.
  • Askella aliohjelman Jarjesta2 sisään painamalla F11 (Step Into).
  • Avaa Locals-välilehti ruudun alareunasta. numerot-muuttujan kohdalla on pieni plus-merkki, josta voit tarkastella muuttujassa olevia tietoja.
  • Askella aliohjelma läpi F11:llä.
  • Kun palaat pääohjelmaan, klikkaa F5, jolloin ohjelma ajaa itsensä loppuun saakka ilman askellusta.
  • Poista nyt keskeytyskohta klikkaamalla punaista ympyrää.
  • Laita keskeytyskohta riville 51 ja debuggaa F5:llä.
  • Askella jälleen aliohjelman sisään, avaa Locals-välilehti ja tutki mitä tapahtuu.
  • Palatessasi pääohjelmaan klikkaa F5 ja ohjelman suoritus menee loppuun saakka ilman askellusta.
  • Yritä selvittää, miksi aliohjelmakutsu Jarjesta2(luvut[0], luvut[1]) ei toimi: pääohjelmassa tulostuu luvut alkuperäisessä järjestyksessä. Vinkki: monisteen luku 14. Olioiden ja alkeistietotyyppien erot.
  • Tarvittaessa breakpointtiin voidaan asettaa ehtoja (Conditional Breakpoint). Tämä tapahtuu klikkaamalla breakpointtia hiiren oikealla ja valitsemalla Condition.

4 String ja StringBuilder olioiden ero aliohjelmakutsussa

  • Tee samaan solutioniin uusi projekti Debuggaus3.
  • Avaa esimerkkitiedosto Olioviitteita.cs. Älä vielä liitä koodia Visual Studioon.
  • Lue koodi tarkasti läpi.
  • Mieti, mitä tulostuu rivillä 22, ja mitä rivillä 26. Onko tulostuksissa jotain eroa, ja jos on, miksi?
  • Kopioi lopuksi koodi Visual Studioon ja tarkista asia. Saat koodin tekstimuodossa klikkaamalla sivun alareunassa olevaa "Download as original format" -linkkiä.
  • Keskustele vieruskaverin kanssa, miksi ohjelma käyttäytyi niin kuin käyttäytyi.

5. Harjoitustyö

6. Demotehtävät

  • Tee demotehtäviä. Käytä debuggeria jos on ongelmia!

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.