Please to interact with this component.

{}

Pääteohjaus 5

Ruksi ne pääteohjausryhmät joissa olet Zoomilla paikalla viikolla 41.
Koita välttää yli 30 hengen ryhmiä!

vko 41 ma ti ke to pe
08-10

Please to interact with this component.

Please to interact with this component.

10-12

Please to interact with this component.

Please to interact with this component.

Please to interact with this component.

12-14

Please to interact with this component.

Please to interact with this component.

Please to interact with this component.

14-16

Please to interact with this component.

Please to interact with this component.

Please to interact with this component.

16-18

Please to interact with this component.

Please to interact with this component.

Please to interact with this component.


# opiskelijat

Please to interact with this component.

# ohjaajat

Please to interact with this component.

# statrunner
# showabsents
# jitsipaikalla

Paikkallaolo ja Jitsi-huone

  • Tämän paikallaolo-luvun sisällä älä ruksi tai muuta mitään jos et ole aidosti Zoomissa paikalla

Ruksi alta että olet paikalla tähän aikaan. Jos jatkat seuraavaan ryhmään, niin virkistä sivu klo xx:05 jälkeen ja ruksi uudelleen.

Ruksi myös se, haluatko tehdä yksin vai ryhmässä.

Kun kaikki ovat paikalla, niin opettaja arpoo sinulle Jitsi-huoneen (Jitsi on kuten Zoom, mutta lähtee helpommin käyntiin). Kun opettaja on arponut, paina Päivitä huone ja saat linkin josta Jitsi-huoneesi aukeaa. Jää joka tapauksessa Zoomiin eli pidä se auki, mutta mene myös sinne Jitsi-huoneeseesi. Jaa siellä näyttösi vasemman alakulman ruudun kuvasta. Jos teet ryhmässä, niin keskustele ja tee tehtäviä parisi kanssa. Katselkaa vuorotellen toistenne näyttöjä ja auttakaa toisianne. Jos et pääse Jitsiin, nostakaa Zoomissa käsi ja laittakaa zoomissa chattiin käyttäjätunnuksenne (TIM-tunnus).

Ohjauksen aikana ruksi "liikennevaloja" sen mukaan, mikä on akuutti tarve. Ei kuitenkaan etukäteen, vaan vasta kun "tilanne on päällä". Ohjaaja tulee Jitsiin auttamaan teitä heti kun ehtii.

  • Please to interact with this component.

    Olen nyt paikalla pe16 tilaisuudessa
  • Please to interact with this component.

    Haluan tehdä yksin, en halua paria
  • Ryhmän nimi

    Please to interact with this component.

    {}

    • jätä tyhjäksi jos haluat että sinulle arvotaan pari
    • jos haluat tiettyyn ryhmään kaverin kanssa, keksikää tähän ryhmän nimi ja laittakaa molemmat sama ryhmän nimi tähän. Esim toisen käyttäjätunnus. HUOM! kaikkien pitää kirjoittaa isot ja pienet samalla tavalla!
  • Viesti ohjaajille

    Please to interact with this component.

    {}

    • laita tähän jos esim poistut kesken kaiken ryhmästä tai muuta vastaava
  • HUOM! Jitsi on temppuillut aikaajoin. Jos Jitsi ei toimi, tehdään Zoomin breakout huoneita teille. Merkatkaa tähän mihin huoneeseen menitte (huoneen numero):

    Please to interact with this component.

    {}


Huoneen osallistujat:

Please to interact with this component.

{}

Avaa tästä huoneesi:

Please to interact with this component.

{}

  • Kun olet tekemässä tehtäviä, ruksi alle avuntarpeen tilanne.
  • Älä häiritse tarkoittaa että ohjaajat eivät käy lainkaan paikalla, jollei tule muuta väriä. Samassa huoneessa olevien tulisi käyttää harmaata Älä häiritse samalla tavalla.
  • Kun lopetat, vaihda Pois-tilaan

Please to interact with this component.

{}

Älä häiritse

Please to interact with this component.

{}

Hyvin menee

Please to interact with this component.

{}

Apua

Please to interact with this component.

{}

Iso hätä

Please to interact with this component.

{}

Pois


  • Jotta saat huoneesi, virkistä selain kun ohjaajan on arponut!
# updateRunner
# runner

```


# timestamper
# runnerTeeHuoneet


Debuggaus

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

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 (Git)

Jos et edellisessä ohjauksessa vielä tutustunut versionhallintaan, tee se nyt. Jos sinulla ei vielä ole omaa projektia kurssin etävarastossa, voit tehdä sen kohdan 3 ohjeilla. Tämän jälkeen kloonaa etävarasto omalle koneelle kohdan 6 ohjeilla.

1. Debuggaus

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

2. Askeltaminen debuggerissa ja lokaalit muuttujat

MAC HUOM!. Alla olevissa ohjeissa on aina Debug -jotakin. VS for Macissa vastaava menu on Run. Lisäksi Macissa pikanäppäimet ovat oletuksena erit, ne näkee sieltä Run-menun alta.

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

  • Tee uusi Solution (vaikkapa nimelle Demo5) ja projekti 'Debuggaus' (Console Application tai vielä mieluummin Jypelin alta ConsoleMain).

  • Copy-pasteta sinne kaiken päälle seuraava sisältö:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    namespace LaskentaaMalli
    {
        public class LaskentaaMalli
        {
            public static void Main(string[] args)
            {
                double kanta = 5;
                double korkeus = 7;
                double ala;
                ala = KolmionAla(kanta, korkeus);
                System.Console.WriteLine(ala);
                System.Console.WriteLine("Valmis");
            }
            /// <summary>
            ///
            /// </summary>
            /// <param name="kanta"></param>
            /// <param name="korkeus"></param>
            /// <returns></returns>
            public static double KolmionAla(double kanta, double korkeus)
            {
                double a = kanta * korkeus / 2;
                return a;
            }
        }
    }    
  • Windows: Paina F11 tai klikkaa Debug -> Step into (suomeksi askella). Ohjelma käynnistyy debuggaustilaan. Keltainen nuoli vasemmalla näyttää, mitä koodiriviä seuraavaksi suoritetaan.

  • Mac: Laita keskyetyskohta riville double kanta = 5;. Keskeytyskohta laitetaan klikkaamalla koodi-ikkunan vasempaan reunaan halutun rivin kohdalla, vaalean harmaalla alueella. Sitten ota menusta Run/Start Debugging. Jatkossa olevat F11 yms voivat vaihdella ja olla eri painikkeissa. Katso lyhenteet Run-menusta.

  • Paina uudestaan F11. Askellettiin riville 11. 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ä 12. 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 25 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 System.Console.WriteLine("Valmis");-riville, ja vielä kerran 'F11'.

  • 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 14), 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.

  • Mikäli tiedoston nimeksi tuli Program.cs muuta se nimeksi Jarjesta.cs

  • Kopioi alla oleva koodi ja liitä se juuri tekemäsi tiedoston sisällön tilalle

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    namespace Debuggaus
    {
        /// <summary>
        /// Harjoitellaan debuggerin käyttöä ja olioviitteitä.
        /// </summary>
        public class Jarjesta
        {
            /// <summary>
            /// Järjestetään taulukon 2 ekaa lukua järjetykseen.
            /// </summary>
            /// <param name="numerot">Järjestettävä taulukko.</param>
            public static void Jarjesta2(int[] numerot)
            {
                if (numerot[0] < numerot[1]) return;
                int t = numerot[0];
                numerot[0] = numerot[1];
                numerot[1] = t;
            }
    
            /// <summary>
            /// Vaihtaa, mutta ei toimi?
            /// </summary>
            /// <param name="a">1. luku</param>
            /// <param name="b">2. luku</param>
            public static void Jarjesta2(int a, int b)
            {
                if (a < b) return;
                int t = a;
                a = b;
                b = t;
            }
    
            /// <summary>
            /// Pääohjelmassa luodaan int-taulukko jossa 2 alkiota.
            /// Kutsutaan järjestä-aliohjelmia.
            /// </summary>
            /// <param name="args"></param>
            public static void Main(String[] args)
            {
                              // 0   1
                int[] luvut = { 34, 21 };
                Console.WriteLine(luvut[0] + " " + luvut[1]);
                Jarjesta2(luvut[0], luvut[1]);
                Console.WriteLine(luvut[0] + " " + luvut[1]);
                Jarjesta2(luvut);
                Console.WriteLine(luvut[0] + " " + luvut[1]);
            }
        }
    }    
  • 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 49.

  • Askella aliohjelman Jarjesta2 sisään painamalla F11 (Step Into).

  • Avaa Locals-välilehti ruudun alareunasta. numerot-muuttujan kohdalla on pieni >-merkki (kolmio tai nuolenpää, josta valintaa voi suurentaa), 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 47 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 tee sitä mitä voisi kuvitella: 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. Tämän tekemiseen kannattaa tutustua huolella, sillä debug-näytteessä sitä kysytään. Ks. esim. Ehdollisen keskeytyskohdan laittaminen

4 String ja StringBuilder olioiden ero aliohjelmakutsussa

  • Tee samaan solutioniin uusi projekti Debuggaus3.

  • Tutki koodia:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    namespace Olioviitteita
    {
        /// <summary>
        /// Harjoitellaan olioviitteiden käyttöä.
        /// </summary>
        public class Olioviitteita
        {
            /// <summary>
            /// Luodaan String-olio ja StringBuilder-olio, ja kutsutaan aliohjelmia
            /// välittäen niille luodut oliot, ja katsotaan mitä tapahtuu.
            /// </summary>
            /// <param name="args"></param>
            public static void Main(string[] args)
            {
                StringBuilder mj1 = new StringBuilder("Janne");
                MuutaMerkkiSB(mj1);
                Console.WriteLine(mj1); // Mitä tulostuu? Miksi??
                String mj2 = "Janne";
                MuutaMerkki(mj2);
                Console.WriteLine(mj2); // Mitä tulostuu? Miksi??
            }
    
            /// <summary>
            /// Lisätään annetun StringBuilder-merkkijonon perään sana.
            /// </summary>
            /// <param name="a">Annettu StringBuilder-merkkijono.</param>
            public static void MuutaMerkkiSB(StringBuilder a)
            {
                a.Append(" Seppänen");           
            }
    
            /// <summary>
            /// Lisätään annetun String-merkkijonon perään sana.
            /// </summary>
            /// <param name="a">Annettu String-merkkijono.</param>
            public static void MuutaMerkki(String a)
            {
                a = a + " Seppänen";
            }       
        }
    }  

    Älä vielä liitä koodia Visual Studioon.

  • Lue koodi tarkasti läpi.

  • Mieti, mitä tulostuu riveillä joissa lukee Mitä tulostuu?. Onko tulostuksissa jotain eroa, ja jos on, miksi?

  • Kopioi lopuksi koodi Visual Studioon ja tarkista asia.

  • 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.