1 00:00:00,000 --> 00:00:00,309 2 00:00:00,309 --> 00:00:02,350 [? DAN ARMADARAS:?] Hei, Olen [? Dan Armadaras?]. 3 00:00:02,350 --> 00:00:04,410 Tänään aiomme Tarkastelemme virheenkorjaus. 4 00:00:04,410 --> 00:00:06,697 Ei vain aiomme puhua joitakin tekniikoita, 5 00:00:06,697 --> 00:00:09,280 mutta myös aiomme tarkastella joitakin ominaisuuksia sisälsi 6 00:00:09,280 --> 00:00:14,170 sisällä CS50 IDE, joka mahdollistaa voit helposti debug ohjelma. 7 00:00:14,170 --> 00:00:16,272 >> Vain yksi esimerkki jotain, että voi mennä pieleen 8 00:00:16,272 --> 00:00:18,730 ja se on todella jotain että olemme jo ennen nähnyt. 9 00:00:18,730 --> 00:00:23,200 Tässä tapauksessa tämä on C-ohjelma joka hyväksyy kokonaisluku käyttäjä, 10 00:00:23,200 --> 00:00:27,580 jakaa se kahdella ja tarjoaa lähtö takaisin käyttäjälle. 11 00:00:27,580 --> 00:00:30,610 Nyt mitä olemme nähneet aiemmin luentoja, 12 00:00:30,610 --> 00:00:34,370 me tiedämme, että tämä itse aiheuttaa tietyntyyppisiin jako ongelmia 13 00:00:34,370 --> 00:00:35,860 kun meillä on pariton määrä. 14 00:00:35,860 --> 00:00:40,330 >> Erityisesti me vain heittää pois mitään desimaalipilkun jälkeen. 15 00:00:40,330 --> 00:00:43,170 Nyt tiedämme, että tämä sattuu olemaan kyse. 16 00:00:43,170 --> 00:00:47,430 Ja jos me ajaa se, voimme vahvistaa epäilyksemme, ensimmäinen, kokoamalla. 17 00:00:47,430 --> 00:00:50,460 Ja sitten, ajamalla ja kirjoittamalla pariton määrä. 18 00:00:50,460 --> 00:00:51,720 >> Tämä ei ole mitään uutta. 19 00:00:51,720 --> 00:00:54,490 Mutta tämä on todella esimerkki vika, joka 20 00:00:54,490 --> 00:00:58,810 sisällä voi olla suurempi ohjelma että on vaikeampi jäljittää. 21 00:00:58,810 --> 00:01:02,640 Vaikka tiedämme, mitä kysymys on, tosi asian ydin 22 00:01:02,640 --> 00:01:06,250 saattaa yrittää tunnistaa erityisesti jos virhe ilmenee, 23 00:01:06,250 --> 00:01:09,750 tunnistaa, mitä tämä ongelma on, ja sitten kiinnittämällä se. 24 00:01:09,750 --> 00:01:14,400 Joten antaa tätä esimerkkinä mitä voisi olla jotain 25 00:01:14,400 --> 00:01:19,030 että tiedämme jo, mutta voidaan haudata sisällä muiden osien koodia. 26 00:01:19,030 --> 00:01:23,090 >> Joten avaa tämä muusta lähteestä koodi tiedosto esimerkkinä, 27 00:01:23,090 --> 00:01:27,165 tämä jako ongelma on nyt osa suurempaa ohjelmaa. 28 00:01:27,165 --> 00:01:29,040 Silti saattaa olla hieman bittinen keinotekoinen, ja me 29 00:01:29,040 --> 00:01:31,076 ehkä helposti tunnistaa sen, erityisesti 30 00:01:31,076 --> 00:01:32,450 koska me vain keskustelemme. 31 00:01:32,450 --> 00:01:38,250 Mutta voimme selvittää, että tämä ongelma voi olla laajemmassa mittakaavassa. 32 00:01:38,250 --> 00:01:45,450 >> Jos minä kokoaa ja nyt ajaa se, anna pariton määrä, 33 00:01:45,450 --> 00:01:49,816 voimme nähdä, että emme saa tarkasti tuotos, joka meillä voi odottaa. 34 00:01:49,816 --> 00:01:51,690 Tässä nimenomaisessa tapauksessa, voisimme sanoa, että me 35 00:01:51,690 --> 00:01:56,060 haluavat laskea kaikki numerot yhdestä jopa joitakin erityisiä numero. 36 00:01:56,060 --> 00:01:58,130 Ja voimme nähdä, että me on eri asioita 37 00:01:58,130 --> 00:02:03,880 täällä jos olemme syöttöä, yksinkertaisesti, 0 ja 1, kun tarjoamme panos 5. 38 00:02:03,880 --> 00:02:07,380 >> Joten tiedämme jo, että siellä ongelma täällä. 39 00:02:07,380 --> 00:02:11,662 Mutta emme ehkä tiedä tarkalleen jos tämä asia todella on olemassa. 40 00:02:11,662 --> 00:02:13,620 Nyt yksi niistä tavoista, että voimme yrittää korjata tämän 41 00:02:13,620 --> 00:02:15,745 on jotain, että olemme jo otettu käyttöön. 42 00:02:15,745 --> 00:02:18,880 Voimme vain käyttää sitä suuremmassa mittakaavassa. 43 00:02:18,880 --> 00:02:21,680 >> On line 14, meillä on Tämän printf toiminto, 44 00:02:21,680 --> 00:02:25,620 jonka avulla voimme tulostaa valtio ja erilaisia ​​tietoja. 45 00:02:25,620 --> 00:02:28,880 Ja tämä on jotain, sinun tulisi hyödyntää omassa ohjelmassa 46 00:02:28,880 --> 00:02:33,100 yrittää selvittää, mitä on tapahtuu eri riviä koodia. 47 00:02:33,100 --> 00:02:36,350 Joten vaikka tämä ei ole lopullinen tuotos että me todella 48 00:02:36,350 --> 00:02:39,830 haluavat tuottaa ulos Tällä ohjelmalla vielä 49 00:02:39,830 --> 00:02:42,300 saattaa olla joitakin debug lausunnot jossa 50 00:02:42,300 --> 00:02:46,970 voi yrittää selvittää tarkasti, mitä sisällä tapahtuu meidän koodi. 51 00:02:46,970 --> 00:02:51,210 >> Joten tässä tapauksessa, aion printf kanssa debug tag. 52 00:02:51,210 --> 00:02:53,540 Tässä tapauksessa tämä on vain debug string 53 00:02:53,540 --> 00:02:56,840 että olen ajan laittoi jotta siitä tulee hyvin selkeä tuotoksen minun koodi 54 00:02:56,840 --> 00:02:59,200 mitä se on, että haluan näyttää. 55 00:02:59,200 --> 00:03:04,410 Ja lähtö täällä numero että olemme laskettu. 56 00:03:04,410 --> 00:03:06,800 >> Tässä tapauksessa, voisin haluavat tietää tarkasti 57 00:03:06,800 --> 00:03:11,380 mitä tapahtuu ennen ja jälkeen joitakin erityisiä laskenta. 58 00:03:11,380 --> 00:03:16,224 Niin voisin käyttää printf ennen ja sen jälkeen rivi koodia. 59 00:03:16,224 --> 00:03:18,640 Tässä tapauksessa, voisin jopa tehdä siitä hieman selvemmin 60 00:03:18,640 --> 00:03:21,960 sanomalla debug ennen ja debug jälkeen niin 61 00:03:21,960 --> 00:03:26,540 että en sekoita itseäni useita linjoja, jotka näyttävät samanlainen. 62 00:03:26,540 --> 00:03:32,290 >> Nyt jos me kääntää tämän ja ajaa se, kirjoita numero, kuten viisi uudelleen, 63 00:03:32,290 --> 00:03:35,090 voimme nähdä, että meillä on nyt lähtö ennen ja jälkeen 64 00:03:35,090 --> 00:03:40,670 ja huomaat, että emme ole tehneet selkeää jako tai selkeä joilla lukumäärästä 65 00:03:40,670 --> 00:03:43,680 että me todella haluavat tehdä. 66 00:03:43,680 --> 00:03:48,660 Nyt tässä tapauksessa, tämä on ei oikeastaan ​​selvä tuotos. 67 00:03:48,660 --> 00:03:52,440 Se ei oikeastaan ​​selvä tulos, joka haluamme pois kyseistä ohjelmaa. 68 00:03:52,440 --> 00:03:54,427 >> Ja tämä on, jälleen, hieman contrived. 69 00:03:54,427 --> 00:03:57,510 Mutta ehkä yksi niistä asioista, jotka voisimme tehdä, jos erittely sanoi 70 00:03:57,510 --> 00:04:01,900 että haluamme jakaa tämän 2 ja lisää 1-- niin toisin sanoen, 71 00:04:01,900 --> 00:04:04,550 haluamme pyöristää up-- sitten tietäisimme, että voisimme 72 00:04:04,550 --> 00:04:08,060 tehdä kyseisen asia, tässä tapauksessa. 73 00:04:08,060 --> 00:04:14,010 Nyt täällä tiedämme, että meillä on voi lisätä 1 meidän puolittunut numero. 74 00:04:14,010 --> 00:04:16,490 >> Katsotaanpa kääntää tämän ja vahvistaa, että tämä 75 00:04:16,490 --> 00:04:18,860 käyttäytyy siten, että haluamme. 76 00:04:18,860 --> 00:04:21,980 Voimme nähdä, että nyt ennen ottaa, meillä on numero 5. 77 00:04:21,980 --> 00:04:26,620 Saatuaan, meillä on numero 3, joka mukaan meidän toiveiden, 78 00:04:26,620 --> 00:04:29,292 halusimme tehdä. 79 00:04:29,292 --> 00:04:31,000 Mutta jos katsomme tuotos täällä, voimme 80 00:04:31,000 --> 00:04:33,760 nähdä, että meillä olisi toinen bug kokonaan, mikä on 81 00:04:33,760 --> 00:04:36,940 että me aloitamme count 0. 82 00:04:36,940 --> 00:04:39,390 >> Nyt taas, tämä on jotain että olemme nähneet aiemmin 83 00:04:39,390 --> 00:04:42,500 ja voimme korjata melko helposti. 84 00:04:42,500 --> 00:04:44,790 Mutta tässä tapauksessa, me oli myös hyötyä 85 00:04:44,790 --> 00:04:48,940 käyttää printf selvitys suoraan sisällä silmukan 86 00:04:48,940 --> 00:04:52,930 tietää tarkasti missä että virhe oli tapahtumassa. 87 00:04:52,930 --> 00:04:55,150 Joten printf lausunnot ovat erittäin hyödyllinen auttaa 88 00:04:55,150 --> 00:04:57,940 voit määrittää missä, juuri lähdekoodia, 89 00:04:57,940 --> 00:05:00,620 tietty virhe tapahtuu. 90 00:05:00,620 --> 00:05:03,650 >> Ja se on myös tärkeää ymmärtää, että, kuten me kirjoittaa koodia, 91 00:05:03,650 --> 00:05:06,052 olisimme oletukset tilasta ohjelman. 92 00:05:06,052 --> 00:05:08,510 Tai voisimme olla oletukset mitä osa ohjelmaa 93 00:05:08,510 --> 00:05:13,020 on todella oikea tai väärä, kun myöhemmin kun rakennamme että ohjelmasta 94 00:05:13,020 --> 00:05:15,950 ja tehdä siitä osa monimutkainen ja suurempia ohjelma 95 00:05:15,950 --> 00:05:19,700 että ymmärrämme, että jostakin Tämän on todella buginen. 96 00:05:19,700 --> 00:05:22,680 >> Käyttämällä printf voi todella auttaa kaventaa ja tunnistaa 97 00:05:22,680 --> 00:05:26,430 alueiden ohjelma, joka saa käyttäytyisi juuri niin, että me 98 00:05:26,430 --> 00:05:29,500 odottaa, perustuu meidän oletuksiin. 99 00:05:29,500 --> 00:05:31,460 Mutta on muita työkaluja saatavilla, samoin, 100 00:05:31,460 --> 00:05:34,860 joiden avulla voimme yrittää selvittää missä virhe tapahtuu 101 00:05:34,860 --> 00:05:39,930 ja myös, erityisesti, mitkä asiat tapahtuu sisällä ohjelman. 102 00:05:39,930 --> 00:05:41,990 >> Joten käyttämällä printf on hyvin hyödyllinen, kun halutaan 103 00:05:41,990 --> 00:05:45,900 tunnistamaan tietyillä aloilla ohjelma, joka on joitakin bug. 104 00:05:45,900 --> 00:05:47,730 Mutta se myös tulee tylsiä jonkin ajan kuluttua. 105 00:05:47,730 --> 00:05:50,500 Tässä tapauksessa tämä on suhteellisen yksinkertainen ohjelma 106 00:05:50,500 --> 00:05:52,750 vain yksi tai kaksi muuttujaa. 107 00:05:52,750 --> 00:05:57,260 Ja se on erittäin helppo meille tulostaa arvon niitä muuttujia 108 00:05:57,260 --> 00:05:59,670 yhteydessä suurempi ohjelman. 109 00:05:59,670 --> 00:06:02,670 >> Mutta saatamme olla eri ohjelma, joka on monia muuttujia. 110 00:06:02,670 --> 00:06:06,530 Ja se ei voi olla täysin niin helppokäyttöinen printf 111 00:06:06,530 --> 00:06:10,120 yrittää arvioida, mitä tapahtuu ja jokainen näistä muuttujista 112 00:06:10,120 --> 00:06:13,590 koska ohjelma on täytäntöönpanosta. 113 00:06:13,590 --> 00:06:16,960 On ohjelma, joka on olemassa kutsutaan debuggeri ohjelma. 114 00:06:16,960 --> 00:06:20,320 Tässä tapauksessa, joka me käyttö on GNU debuggeri, tai GDB, 115 00:06:20,320 --> 00:06:24,260 joka antaa meille mahdollisuuden tarkastaa sisäisen toimintaa ohjelman paljon 116 00:06:24,260 --> 00:06:25,700 yksityiskohtaisesti. 117 00:06:25,700 --> 00:06:28,810 >> Voimme todella toteuttaa GDB komentoriviltä 118 00:06:28,810 --> 00:06:35,370 tässä yksinkertaisesti kirjoittamalla GDB ja komento, että haluamme debug. 119 00:06:35,370 --> 00:06:37,550 Tässä tapauksessa laskea. 120 00:06:37,550 --> 00:06:41,650 Nyt tässä tapauksessa, voimme nähdä, että se tuo meidät nopeasti joka sanoo GDB. 121 00:06:41,650 --> 00:06:44,020 Ja voimme todella suorittaa komentoja GDB 122 00:06:44,020 --> 00:06:48,260 todella aloittaa suorittamisen ohjelma, lopeta tietyissä kohdissa, 123 00:06:48,260 --> 00:06:51,060 arvioida muuttujat ja tarkastaa muuttujia 124 00:06:51,060 --> 00:06:54,152 olemassa ohjelmassa tilassa tuona ajankohtana, 125 00:06:54,152 --> 00:06:55,110 ja niin edelleen ja niin edelleen. 126 00:06:55,110 --> 00:06:57,240 Se tarjoaa paljon voimaa meille. 127 00:06:57,240 --> 00:06:59,960 >> Mutta se vain niin, että CS50 IDE myös 128 00:06:59,960 --> 00:07:05,870 tarjoaa GUI tai käyttäjä käyttöliittymä GDB että 129 00:07:05,870 --> 00:07:11,120 voimme tehdä tämän ilman komentoriviltä mitään 130 00:07:11,120 --> 00:07:13,560 tai ollenkaan jopa. 131 00:07:13,560 --> 00:07:16,930 Että voin käyttää, että on käyttää debug-painiketta 132 00:07:16,930 --> 00:07:20,120 klo hyvin alkuun CS50 IDE. 133 00:07:20,120 --> 00:07:24,280 Nyt aikaisemmin, mitä meillä on nähnyt on, että käytämme komentoa 134 00:07:24,280 --> 00:07:27,660 linja kääntää ja suorita ohjelma. 135 00:07:27,660 --> 00:07:29,790 >> Debug-painike tekee molemmat nämä toimenpiteet. 136 00:07:29,790 --> 00:07:34,380 Mutta se myös tuo esiin debuggeri välilehti äärimmäisenä oikealla 137 00:07:34,380 --> 00:07:38,280 joka antaa meille mahdollisuuden tarkastaa lajikkeen ominaisuuksien ohjelman 138 00:07:38,280 --> 00:07:40,500 koska se on täytäntöönpanovaltiossa. 139 00:07:40,500 --> 00:07:44,280 Jos minä sitten debug, tässä tapauksessa, se tuo esiin 140 00:07:44,280 --> 00:07:48,230 uusi välilehti konsolin ikkuna alareunassa. 141 00:07:48,230 --> 00:07:51,160 >> Ja voit nähdä, että tämä välilehti on joitakin tietoja huipulla. 142 00:07:51,160 --> 00:07:52,670 Ja voimme pitkälti sivuuttaa tämän. 143 00:07:52,670 --> 00:07:54,800 Mutta yksi niistä asioista, että haluamme huomata 144 00:07:54,800 --> 00:07:57,170 on, että se tuottaa sama asia, että me 145 00:07:57,170 --> 00:08:03,000 saisi jos yritimme ajaa tekemäsi C-ohjelma vuonna pääteikkunassa. 146 00:08:03,000 --> 00:08:06,230 >> Täällä voimme nähdä se on käynnissä kalahtaa, ja sillä on erilaisia ​​lippuja, 147 00:08:06,230 --> 00:08:12,660 ja se on koottaessa count.c tiedoston, joka oli valitun välilehden aikaan 148 00:08:12,660 --> 00:08:15,100 että osuin debug. 149 00:08:15,100 --> 00:08:18,010 Joten tämä on erittäin hyödyllinen, koska nyt käyttää tätä debug painiketta, 150 00:08:18,010 --> 00:08:23,280 voimme samanaikaisesti koota ja sitten suorita ohjelma, me todella 151 00:08:23,280 --> 00:08:24,460 halua ajaa. 152 00:08:24,460 --> 00:08:27,880 >> Lippua, joka on tärkeitä, tässä tapauksessa, 153 00:08:27,880 --> 00:08:30,190 olemme todella käyttänyt pisimpään 154 00:08:30,190 --> 00:08:32,450 mutta myös vain tekivät joitakin käsi heiluttaen [äänetön], joka 155 00:08:32,450 --> 00:08:33,820 on tämä yksi täällä. 156 00:08:33,820 --> 00:08:35,790 Vuonna kalahtaa, sanotaan -ggdb3. 157 00:08:35,790 --> 00:08:38,570 158 00:08:38,570 --> 00:08:41,250 Tässä tapauksessa, mitä olemme kertoo kalahtaa, meidän kääntäjä, 159 00:08:41,250 --> 00:08:43,820 on, että haluamme kääntää meidän ohjelma. 160 00:08:43,820 --> 00:08:46,810 Mutta myös mitä nimeltään symboli tiedot 161 00:08:46,810 --> 00:08:50,940 niin että kääntäjä todella on pääsy on paljon taustatiedoista 162 00:08:50,940 --> 00:08:52,610 sisällä ohjelma. 163 00:08:52,610 --> 00:08:55,260 >> Tarkemmin sanottuna, numero toimintoja, minulla on, 164 00:08:55,260 --> 00:08:58,000 nimet toimintoja, muuttujat, tyypit 165 00:08:58,000 --> 00:09:01,730 että nämä muuttujat ovat, ja erilaisia muita asioita, jotka auttavat debuggeri 166 00:09:01,730 --> 00:09:04,350 suoriutua. 167 00:09:04,350 --> 00:09:06,600 Nyt jotain muuta se on tärkeää mainita 168 00:09:06,600 --> 00:09:10,280 kun me keskustelemme käynnissä ohjelman tällä tavalla. 169 00:09:10,280 --> 00:09:13,660 >> Huomaa, että se on todella esille uuden välilehden meidän konsoli 170 00:09:13,660 --> 00:09:14,780 alareunassa. 171 00:09:14,780 --> 00:09:18,600 Meillä ei enää tarvitse vuorovaikutuksessa suoraan pääteikkuna. 172 00:09:18,600 --> 00:09:21,420 Mutta tämä uusi välilehti on todella pääteikkuna. 173 00:09:21,420 --> 00:09:26,710 Se vain on nimenomaan käynnissä ohjelma, olemme luoneet. 174 00:09:26,710 --> 00:09:29,270 >> Huomaa, että alareunassa, vuonna yhdessä joidenkin ulostulo 175 00:09:29,270 --> 00:09:33,500 mukaan kalahtaa kääntäjä ja GDB, jota voidaan pitkälti sivuuttaa, 176 00:09:33,500 --> 00:09:37,570 se todella osoittaa lähtö meidän ohjelma alareunassa. 177 00:09:37,570 --> 00:09:41,240 Nyt on tärkeää ymmärtää että tämä ikkuna tosiasiallisesti 178 00:09:41,240 --> 00:09:43,360 näyttää ulostulo ohjelmasi 179 00:09:43,360 --> 00:09:47,190 mutta myös voi hyväksyä syöttää kyseisen ohjelman, samoin. 180 00:09:47,190 --> 00:09:49,260 >> Niin huomaa, että sanoo kirjoita numero, 181 00:09:49,260 --> 00:09:53,050 joka on sama tuotos, joka meillä oli oli pääteikkunassa ennen. 182 00:09:53,050 --> 00:09:55,510 Mutta se on nyt esitetty tässä uudessa välilehdessä. 183 00:09:55,510 --> 00:09:56,550 Voin syöttää numeron. 184 00:09:56,550 --> 00:10:00,900 Ja se todella toimivat odotamme 185 00:10:00,900 --> 00:10:05,890 näyttää meille meidän debug, lähtö, tuotos, joka voisi olla buginen, 186 00:10:05,890 --> 00:10:07,010 kuten olemme nähneet aiemmin. 187 00:10:07,010 --> 00:10:10,460 Ja alareunassa, se tosin on lisää tuotoksen 188 00:10:10,460 --> 00:10:14,550 BKT vain, että tämä ohjelma on valmis. 189 00:10:14,550 --> 00:10:16,655 >> Nyt kun näit tässä Erityisesti kulkevat, 190 00:10:16,655 --> 00:10:19,370 se ei ole erityisen hyödyllinen, koska jopa 191 00:10:19,370 --> 00:10:23,740 vaikka meillä oli debuggeri valikko tulevat up, tämä oli vielä käynnissä ohjelma. 192 00:10:23,740 --> 00:10:26,790 Ei missään vaiheessa se todella tauko toteuttamisesta meille 193 00:10:26,790 --> 00:10:30,767 pystyä tarkastaa kaikki muuttujien sisällä. 194 00:10:30,767 --> 00:10:32,850 Jotain muuta että meidän on tehtävä, jotta 195 00:10:32,850 --> 00:10:36,910 päästä GDB tunnustaa, että haluamme keskeyttää ohjelman toteuttamisen 196 00:10:36,910 --> 00:10:42,820 eikä vain anna sen jatkaa normaalisti kuten missä tahansa muussakin tapauksessa. 197 00:10:42,820 --> 00:10:45,530 >> Jotta keskeyttää suorituksen, joillakin tietyillä linja, 198 00:10:45,530 --> 00:10:47,830 meidän on luotava mitä kutsutaan taitekohta. 199 00:10:47,830 --> 00:10:52,670 Ja taitekohta on hyvin helposti luotu tässä CS50 IDE ottamalla hiirellä 200 00:10:52,670 --> 00:10:57,090 ja napsauttamalla suoraan vasemmalle Joidenkin tietylle riville. 201 00:10:57,090 --> 00:10:59,920 Kun minä, että, punainen piste näyttää, mikä osoittaa 202 00:10:59,920 --> 00:11:02,300 että linja on nyt taitekohta. 203 00:11:02,300 --> 00:11:07,540 >> Ja seuraavan kerran juoksen GDB, se pysähtyy toteutuneesta että taitekohta 204 00:11:07,540 --> 00:11:10,280 kun se saavuttaa Koodirivin. 205 00:11:10,280 --> 00:11:12,230 Nyt tämä on tärkeä asia ymmärtää 206 00:11:12,230 --> 00:11:16,140 että se ei ole välttämättä tapauksessa, että jokainen rivi koodia 207 00:11:16,140 --> 00:11:17,880 on todella saatavilla. 208 00:11:17,880 --> 00:11:23,780 Jos olisin luoda toiminto tänne, sillä example-- mitätön f-- 209 00:11:23,780 --> 00:11:31,230 ja vain tehdä tulosta linja here-- hei world-- jos en koskaan kutsua tätä toimintoa, 210 00:11:31,230 --> 00:11:34,770 se on niin, että, jos otan taitekohta täällä, 211 00:11:34,770 --> 00:11:36,220 toiminto ei koskaan kutsutaan. 212 00:11:36,220 --> 00:11:38,310 Ja näin ollen, tämä erityisesti taitekohta 213 00:11:38,310 --> 00:11:43,040 ei koskaan todella keskeyttää Ohjelman toteuttamista. 214 00:11:43,040 --> 00:11:48,020 >> Joten sanoa, että olen oikein luoda taitekohta joitakin rivi koodia 215 00:11:48,020 --> 00:11:50,340 että todella toteutetaan. 216 00:11:50,340 --> 00:11:53,470 Nyt tässä tapauksessa, tämä on ensimmäinen rivi päätehtävä. 217 00:11:53,470 --> 00:11:56,630 Joten se varmasti tapaus että, heti kun aloitan toteuttamista, 218 00:11:56,630 --> 00:11:58,580 ensimmäinen rivi saavutetaan. 219 00:11:58,580 --> 00:12:00,230 GDB pysähtyy toteuttamista. 220 00:12:00,230 --> 00:12:04,100 Ja sitten, minä voi vuorovaikutuksessa debugger. 221 00:12:04,100 --> 00:12:08,480 >> Voit asettaa useita rivejä breakpoints, jos haluat. 222 00:12:08,480 --> 00:12:11,365 Voimme myös luoda riviin täällä tällä segmentillä koodin 223 00:12:11,365 --> 00:12:12,490 että ei koskaan saavuteta. 224 00:12:12,490 --> 00:12:14,744 Ja voimme myös asettaa yhden jäljempänä. 225 00:12:14,744 --> 00:12:16,660 Syy siihen, että olisimme halua tehdä tätä me will 226 00:12:16,660 --> 00:12:19,119 mennä hieman enemmän yksityiskohtaisesti vain hetken. 227 00:12:19,119 --> 00:12:21,660 Joten nyt, haluan vain poistaa nämä ylimääräiset taitepisteissä 228 00:12:21,660 --> 00:12:24,940 jotta voimme katsoa mitä tapahtuu kun minulla on yksi tauko 229 00:12:24,940 --> 00:12:27,650 vaiheessa minun ohjelma. 230 00:12:27,650 --> 00:12:29,410 Olen tehnyt joitakin muutokset tähän ohjelmaan. 231 00:12:29,410 --> 00:12:30,750 Joten minun täytyy tallentaa sen. 232 00:12:30,750 --> 00:12:34,490 Aion klikkaa debug jotta voin alkaa kokoaminen ja sitten 233 00:12:34,490 --> 00:12:36,880 toteuttaminen debuggeri. 234 00:12:36,880 --> 00:12:40,632 >> Tulemme näkemään, että kun hetkiä, line että me valittu tauko 235 00:12:40,632 --> 00:12:43,360 kohta on korostettu keltaisella. 236 00:12:43,360 --> 00:12:47,440 Voimme myös huomata, että ylempi aivan debug paneeli 237 00:12:47,440 --> 00:12:50,940 että tauko kuvake on muuttunut pieneen toistokuvaketta. 238 00:12:50,940 --> 00:12:54,710 Tämä tarkoittaa sitä, että meillä on tauko toteutus, tässä tapauksessa. 239 00:12:54,710 --> 00:12:57,840 Ja lyömällä toistopainiketta olisi jotta voimme jatkaa toteutus 240 00:12:57,840 --> 00:13:00,000 tässä erityinen kohta. 241 00:13:00,000 --> 00:13:03,240 >> Huomaa, että on olemassa pari muuta painikkeet saatavilla debug paneeli, 242 00:13:03,240 --> 00:13:04,220 yhtä hyvin. 243 00:13:04,220 --> 00:13:09,470 Askel yli, jossa voin suorittaa että yhtä riviä koodia 244 00:13:09,470 --> 00:13:14,030 ja askel yli että linja seuraava, joka tässä tapauksessa, 245 00:13:14,030 --> 00:13:17,060 merkitsisi sitä, että printf lauseke suoritetaan. 246 00:13:17,060 --> 00:13:22,310 Ja se sitten tauko teloituksen linja 13, kuten niin. 247 00:13:22,310 --> 00:13:25,090 >> Ja siellä on myös askel osaksi toiminto, joka 248 00:13:25,090 --> 00:13:28,950 on hyödyllistä, jos olen luonut muut toiminnot muualla lähdekoodia. 249 00:13:28,950 --> 00:13:31,420 Ja haluan astua ne toiminnot sijaan 250 00:13:31,420 --> 00:13:33,050 suorittaa tämä tehtävä kokonaisuudessaan. 251 00:13:33,050 --> 00:13:37,279 Mutta me tarkastelemme enemmän vaiheessa osaksi toimivat vain hetken. 252 00:13:37,279 --> 00:13:40,320 Nyt huomaat joitakin muita asioita, jotka oikeasti olemassa tämän debug paneeli. 253 00:13:40,320 --> 00:13:44,110 >> Meillä on tämä paneeli kutsutaan kutsupino, joka näyttää meille 254 00:13:44,110 --> 00:13:45,300 missä tarkalleen olemme. 255 00:13:45,300 --> 00:13:48,550 Tässä tapauksessa olemme sisällä n päätehtävä. 256 00:13:48,550 --> 00:13:50,880 Meidän käsikirjoitus on nimeltään count.c. 257 00:13:50,880 --> 00:13:53,820 Ja me sattuvat olemaan rivi 13, sarake yksi, joka 258 00:13:53,820 --> 00:13:58,950 Juuri korostettu alue lähdekoodin osoittaa, samoin. 259 00:13:58,950 --> 00:14:02,435 >> Nyt huomaa, että tämä näkyy myös alle paikallinen muuttuja jakso 260 00:14:02,435 --> 00:14:06,710 kaikki muuttujia esiintyy tätä toimintoa. 261 00:14:06,710 --> 00:14:08,930 On tärkeää huomata, että kaikki muuttujat 262 00:14:08,930 --> 00:14:12,580 ilmestyy tämän paikallisen muuttuja kohta sisällä toiminto, 263 00:14:12,580 --> 00:14:14,380 jo ennen kuin ne on määritelty. 264 00:14:14,380 --> 00:14:19,160 Voimme nähdä täällä, että meillä on muuttuva nimeltään num, on oletusarvo 0, 265 00:14:19,160 --> 00:14:21,280 ja se on tyyppiä int. 266 00:14:21,280 --> 00:14:24,110 >> Nyt ennen kuin me itse alustaa kaikkia näitä muuttujia, 267 00:14:24,110 --> 00:14:26,685 emme ole välttämättä taattu nähdä arvoa 0. 268 00:14:26,685 --> 00:14:29,200 Ja riippuu muista teloituksista että olet tehnyt 269 00:14:29,200 --> 00:14:32,020 ja valtion oman muistista, kun olet todella ajaa tätä ohjelmaa, 270 00:14:32,020 --> 00:14:34,605 saatat huomata, että olet näe arvoja 0 271 00:14:34,605 --> 00:14:36,550 ja, sen sijaan, joitakin muita hullu numeroita. 272 00:14:36,550 --> 00:14:38,390 >> Mutta älä murehdi. 273 00:14:38,390 --> 00:14:44,610 Se ei tule olemaan merkityksellisiä asti voit itse alustaa arvo. 274 00:14:44,610 --> 00:14:49,630 Nyt tässä tapauksessa, voimme nähdä, että Olen tehnyt joitakin tuotoksia. 275 00:14:49,630 --> 00:14:52,131 Ja minä, juuri nyt, keskeytetty suoritus. 276 00:14:52,131 --> 00:14:53,880 Mutta tässä tapauksessa, mitä En todellakaan halua tehdä 277 00:14:53,880 --> 00:14:58,060 on nyt askel yli tämän linjan koodia jotta voin todella 278 00:14:58,060 --> 00:15:04,390 kysellä käyttäjältä että int että haluamme käyttää ohjelmaamme. 279 00:15:04,390 --> 00:15:07,060 >> Nyt tässä tapauksessa, kun Löin askel yli, ilmoitus 280 00:15:07,060 --> 00:15:11,940 että Tauko tai pikemminkin Jatka painike on muuttunut tähän Tauko-painiketta 281 00:15:11,940 --> 00:15:14,022 koska tämä koodi on todella täytäntöönpanosta. 282 00:15:14,022 --> 00:15:15,730 Mitä tapahtuu nyt on, että se on 283 00:15:15,730 --> 00:15:21,630 odottaa meitä syöttää joitakin tietoja kuten voimme nähdä meidän tulostustekstiä 284 00:15:21,630 --> 00:15:23,600 alareunassa. 285 00:15:23,600 --> 00:15:25,787 >> Joten juuri nyt, tämä on ei oikeastaan ​​keskeytetty, 286 00:15:25,787 --> 00:15:28,620 vaikka se, tavallaan näyttää olla koska mitään ei tapahdu. 287 00:15:28,620 --> 00:15:32,360 Mutta se vain niin, että minun erityistapaus linja 13, 288 00:15:32,360 --> 00:15:34,210 Odotan käyttäjän syötettä. 289 00:15:34,210 --> 00:15:39,130 Ja niin GDB ei voi tarkastaa ohjelma koska se on käynnissä. 290 00:15:39,130 --> 00:15:43,370 >> Nyt seuraavan kerran astun jotkut input-- niin minä kirjoita että numero 5, 291 00:15:43,370 --> 00:15:46,140 kuten olemme nähneet past-- osuma Palaa, ja me 292 00:15:46,140 --> 00:15:51,430 huomata, että heti, GDB taukoja ja jälleen korostaa seuraavalle riville. 293 00:15:51,430 --> 00:15:55,320 Mutta huomaan, että nyt, kun Tämän vuoksi meidän kirjoittamalla arvon, 294 00:15:55,320 --> 00:15:58,930 olemme päivittäneet että arvo sisällä meidän paikallisia muuttujia, jotka 295 00:15:58,930 --> 00:16:05,560 on erittäin hyödyllistä tietää tarkasti mitä se määrä oli muistissa. 296 00:16:05,560 --> 00:16:10,650 >> Nyt voin antaa tämän ohjelman jatkaa pelaa loppuun asti sen toteuttamista 297 00:16:10,650 --> 00:16:12,570 lyömällä Jatka. 298 00:16:12,570 --> 00:16:16,410 Voimme nähdä, että hyvin nopeasti tekee ohjelman loppuun täytäntöönpanosta 299 00:16:16,410 --> 00:16:19,790 kanssa saman tuotoksen että me oli ennen, debuggeri sulkeutuu, 300 00:16:19,790 --> 00:16:23,170 ja nyt tämä ohjelma on täysin pysähtynyt. 301 00:16:23,170 --> 00:16:25,320 >> Osoitan, että vain tarkoituksiin nähdä mitä 302 00:16:25,320 --> 00:16:27,280 tapahtuu, kun me todella osuma Jatka. 303 00:16:27,280 --> 00:16:30,640 Mutta me todella aiomme halua mennä takaisin tähän ohjelmaan 304 00:16:30,640 --> 00:16:33,820 jotta voimme yrittää debug Juuri mitä tapahtuu. 305 00:16:33,820 --> 00:16:37,980 Nyt olen käyttäen debuggeri, sallitte ei tarvitse näitä debug printf lausunnot. 306 00:16:37,980 --> 00:16:43,860 >> Niin voisin poistaa niitä minä teen nyt vain mennä takaisin meidän yksinkertaisempaa koodi 307 00:16:43,860 --> 00:16:45,950 että meillä oli hetki sitten. 308 00:16:45,950 --> 00:16:48,790 Nyt kun tallennan ohjelmoida ja suorittaa sen, 309 00:16:48,790 --> 00:16:53,700 se, jälleen, mene että ensimmäiset taitekohta että minulla oli verkossa 11. 310 00:16:53,700 --> 00:16:57,700 Ja minä voi tarkastaa minun muuttujia kuin haluan tehdä. 311 00:16:57,700 --> 00:17:00,695 >> Se vain niin, että tämä osa ei ole kovin kiinnostava, 312 00:17:00,695 --> 00:17:04,364 Ja tiedän, että aion tulostaa tätä väitettä. 313 00:17:04,364 --> 00:17:05,280 Anna numero. 314 00:17:05,280 --> 00:17:08,099 Ja sitten, tiedän, että aion pyytää käyttäjältä että kokonaisluku. 315 00:17:08,099 --> 00:17:13,329 Joten ehkä, en oikeastaan ​​halua muuttaa minun taitekohta hieman alempana. 316 00:17:13,329 --> 00:17:16,710 >> Voit poistaa taitepisteissä napsauttamalla, jälleen, suoraan 317 00:17:16,710 --> 00:17:18,460 vasemmalla että rivinumero. 318 00:17:18,460 --> 00:17:22,200 Että red dot katoaa osoittaen että taitekohta on nyt poissa. 319 00:17:22,200 --> 00:17:24,780 Nyt tässä tapauksessa, suoritus on keskeytetty. 320 00:17:24,780 --> 00:17:27,770 Ja niin se ei ole todella tulee jatkaa kyseisessä tapauksessa. 321 00:17:27,770 --> 00:17:30,210 Mutta voin asettaa tauko kohta hieman myöhemmin. 322 00:17:30,210 --> 00:17:33,880 >> Ja kun minä nyt jatkan koodi, se jatkuu ja kerro 323 00:17:33,880 --> 00:17:36,190 piste että taitekohta. 324 00:17:36,190 --> 00:17:37,374 Jälleen osuin Jatka. 325 00:17:37,374 --> 00:17:39,040 Ei tunnu mitään tapahtuu. 326 00:17:39,040 --> 00:17:41,450 Mutta se johtuu minun koodi odottaa syötteitä. 327 00:17:41,450 --> 00:17:47,900 Minä tulee numero 5, paina Enter, ja nyt seuraava taitekohta tulevat kärsimään. 328 00:17:47,900 --> 00:17:50,570 >> Nyt tässä tapauksessa, tämä on koodiriviä 329 00:17:50,570 --> 00:17:53,820 että ennen, tiesimme sattui olemaan buginen. 330 00:17:53,820 --> 00:17:57,590 Joten arvioida, mitä tapahtuu juuri tässä vaiheessa. 331 00:17:57,590 --> 00:18:02,620 Kun rivi näkyy korostettuna, tämä linja ei ole vielä pantu täytäntöön. 332 00:18:02,620 --> 00:18:06,490 Joten tässä tapauksessa, voimme nähdä että minulla on useita, joka 333 00:18:06,490 --> 00:18:11,610 Minulla on kokonaisluku nimeltään num, jonka arvo 5. 334 00:18:11,610 --> 00:18:15,090 Ja aion esiintyy jotkut matematiikka että numero. 335 00:18:15,090 --> 00:18:20,130 >> Jos astun yli että, voimme huomata, että arvo num 336 00:18:20,130 --> 00:18:23,780 on muuttunut mukaisesti aritmeettinen että olemme todella tehneet. 337 00:18:23,780 --> 00:18:26,810 Ja nyt, että olemme sisällä tämän silmukan 338 00:18:26,810 --> 00:18:29,090 tai nyt että silmukka itsessään on korostettu, 339 00:18:29,090 --> 00:18:32,450 näemme, että meillä on uusi muuttuja nimeltä i että 340 00:18:32,450 --> 00:18:35,370 aiotaan käyttää, että silmukka. 341 00:18:35,370 --> 00:18:38,230 >> Muistakaa ennen, että olen mainitsi, että joskus olet 342 00:18:38,230 --> 00:18:43,470 näkemään jonkinlainen hullu numerot oletukseksi ennen numero 343 00:18:43,470 --> 00:18:45,530 tai että muuttuja on todella alustettu. 344 00:18:45,530 --> 00:18:49,040 Voimme nähdä, että juuri täällä tämän muuttujan 345 00:18:49,040 --> 00:18:51,345 nimeltään i, joka ei ole vielä alustettu 346 00:18:51,345 --> 00:18:53,560 aikaan esiin. 347 00:18:53,560 --> 00:18:57,070 Mutta voimme nähdä, että se on jonkin verran numero että emme oikeastaan ​​odotamme. 348 00:18:57,070 --> 00:18:57,620 >> Se on okei. 349 00:18:57,620 --> 00:18:59,661 Älä ole huolissasi siitä koska meillä ei oikeastaan 350 00:18:59,661 --> 00:19:04,970 alustettu, että määrä kunnes askel yli tämä rivi ja arvo 351 00:19:04,970 --> 00:19:08,560 i on alustettu arvoon 1.. 352 00:19:08,560 --> 00:19:11,400 Niin nähdä, että se on todella tapauksessa, nyt askel yli. 353 00:19:11,400 --> 00:19:14,420 Voimme nyt nähdä, että linja on suoritettu. 354 00:19:14,420 --> 00:19:17,000 Ja nyt esiin tämä printf linja. 355 00:19:17,000 --> 00:19:22,230 >> Ja voimme nyt nähdä, miten arvomme i ja 3 ovat muuttuneet ajan myötä. 356 00:19:22,230 --> 00:19:26,450 Tämä on erittäin hyödyllistä tehdä, itse asiassa, on askel yli linjat toistuvasti. 357 00:19:26,450 --> 00:19:30,480 Ja voit löytää mitä todella tapahtuu sisällä oman silmukan 358 00:19:30,480 --> 00:19:33,660 ja mitä tapahtuu muuttujat sisällä että silmukka 359 00:19:33,660 --> 00:19:39,200 kuin ohjelman suoritus tapahtuu yksi askel kerrallaan. 360 00:19:39,200 --> 00:19:41,110 >> Nyt tässä vaiheessa, minä astui yli juuri tarpeeksi 361 00:19:41,110 --> 00:19:44,210 että minä nyt olen lopussa minun ohjelma. 362 00:19:44,210 --> 00:19:46,980 Jos astun yli että, se todella lopettaa toteutus 363 00:19:46,980 --> 00:19:48,860 kuten olemme nähneet aiemmin. 364 00:19:48,860 --> 00:19:52,110 Saanen uudelleen tämän, jälleen kerran, niin että voin huomauttaa jotain muuta pois, 365 00:19:52,110 --> 00:19:53,320 yhtä hyvin. 366 00:19:53,320 --> 00:19:55,350 >> Tässä tapauksessa on nyt pyytää minua, taas, 367 00:19:55,350 --> 00:19:57,100 useita, joka Aion jälleen, anna. 368 00:19:57,100 --> 00:20:00,300 Mutta tällä kertaa, aion syöttää suurempaa määrää niin, että silmukka 369 00:20:00,300 --> 00:20:02,540 tulee kerrata kertaa. 370 00:20:02,540 --> 00:20:06,090 Tässä tapauksessa, aion anna arvo 11. 371 00:20:06,090 --> 00:20:08,390 >> Nyt uudelleen, koska olin asettanut taitekohta rivillä 15, 372 00:20:08,390 --> 00:20:10,490 se tulee esiin, että linja. 373 00:20:10,490 --> 00:20:12,980 Voimme nähdä, että meidän numero 11 on oikein 374 00:20:12,980 --> 00:20:15,560 edustettuina meidän paikallisia muuttujia. 375 00:20:15,560 --> 00:20:22,460 Stepping yli että voimme nyt katsoa mitä tapahtuu meidän arvo i 376 00:20:22,460 --> 00:20:25,680 kuten me edetä sisällä tämän silmukan. 377 00:20:25,680 --> 00:20:31,960 Se saa kasvaa joka kerta kun huipulle että silmukka. 378 00:20:31,960 --> 00:20:35,110 >> Nyt yksi asioita, jotka saattavat olla hyödyllistä tehdä suorituksen aikana 379 00:20:35,110 --> 00:20:40,490 Tämän ohjelman on minulle todella muuttaa muuttujat midstream nähdä 380 00:20:40,490 --> 00:20:42,450 mitä tapahtuu minun ohjelma. 381 00:20:42,450 --> 00:20:46,540 Tässä tapauksessa en voi itse tuplaklikkaa arvo. 382 00:20:46,540 --> 00:20:48,040 Huomaa, että se tulee tekstikenttään. 383 00:20:48,040 --> 00:20:50,280 >> Nyt voin tulla eri Arvostamme yhteensä 384 00:20:50,280 --> 00:20:55,700 miten minun ohjelma käyttäytyy kun olen muuttanut että muuttuja. 385 00:20:55,700 --> 00:20:59,560 Nyt tässä tapauksessa, muuttuva Nyt sisältää arvon 10. 386 00:20:59,560 --> 00:21:02,810 Mutta ohjelma on edelleen keskeytetty toteuttamiseksi. 387 00:21:02,810 --> 00:21:07,610 Kun astun yli, näen että arvo i, joka tulin 10, 388 00:21:07,610 --> 00:21:12,170 ei ole suurempi kuin arvo num, joka heti aiheuttaa silmukka 389 00:21:12,170 --> 00:21:14,240 lopettaa täytäntöönpanosta. 390 00:21:14,240 --> 00:21:16,210 >> Nyt se ei ole ainoa Miksi olisit 391 00:21:16,210 --> 00:21:19,450 haluat muokata muuttujan paikallaan. 392 00:21:19,450 --> 00:21:22,210 Saatat todella haluavat yrittää muuttaa sitä niin 393 00:21:22,210 --> 00:21:24,590 että voit jatkaa toteuttaminen silmukan 394 00:21:24,590 --> 00:21:27,370 tai niin, että voit muokata jotain arvoa, ennen kuin se 395 00:21:27,370 --> 00:21:32,630 saavuttaa tiettyjä joukko aritmeettinen että olet aikeissa suorittaa. 396 00:21:32,630 --> 00:21:36,210 >> Joten nyt me todella muuttaa arvo, koska ohjelman täytäntöönpanosta, 397 00:21:36,210 --> 00:21:39,540 se aiheutti silmukka lopettaa ennenaikaisesti, yhtäkkiä, i 398 00:21:39,540 --> 00:21:42,770 sattui olemaan suurempi kuin arvo NUM, eli että silmukka 399 00:21:42,770 --> 00:21:45,410 ei enää tarvita suoritettavaksi. 400 00:21:45,410 --> 00:21:48,780 Lisäksi se sattui olemaan tapauksessa, että muutimme arvo I 401 00:21:48,780 --> 00:21:53,270 kun linja 17 korostettiin, joka oli ajankohtana 402 00:21:53,270 --> 00:21:56,280 että silmukan suorittamisen tosiasiallisesti arvioidaan. 403 00:21:56,280 --> 00:22:00,210 >> Jos olisin muuttanut arvo I eri linja, sanovat 19, 404 00:22:00,210 --> 00:22:03,360 olisimme nähneet eri käyttäytyminen koska linja 19 olisi 405 00:22:03,360 --> 00:22:08,310 on suoritettu ennen silmukka ehto arvioida uudelleen. 406 00:22:08,310 --> 00:22:11,900 Nyt tässä vaiheessa, olen, taas, lopussa tämän ohjelman. 407 00:22:11,900 --> 00:22:15,707 Ja voin antaa tämän siirtyä anna minun ohjelma lopettaa luonnollisesti. 408 00:22:15,707 --> 00:22:18,290 Mutta on pari asiaa jotka ovat tärkeitä ottaa pois 409 00:22:18,290 --> 00:22:19,960 mistä tässä keskustelussa. 410 00:22:19,960 --> 00:22:22,490 Sinun täytyy arvioida omat oletukset 411 00:22:22,490 --> 00:22:24,710 miten koodi pitää käyttäytyä. 412 00:22:24,710 --> 00:22:28,220 Aina luulet, että jotkut pala koodia tiedät sattuu työskennellä, 413 00:22:28,220 --> 00:22:30,940 jotka saattavat olla punainen lippu mennä takaisin ja arvioida, ja varmista 414 00:22:30,940 --> 00:22:33,470 että oletus miten tämä koodi toimii 415 00:22:33,470 --> 00:22:38,290 on todella totta, miten se on ilmaistuna lähdekoodia. 416 00:22:38,290 --> 00:22:41,300 >> Mutta vielä pisteeseen oli, kun käytämme debuggeri, 417 00:22:41,300 --> 00:22:43,920 voit laittaa raja-arvot osoitteessa eri riviä koodia, 418 00:22:43,920 --> 00:22:48,110 joka aiheuttaa virheenkorjaus tauko toteuttamista kussakin näistä linjat 419 00:22:48,110 --> 00:22:52,210 jotta voit arvioida muistiin tai jopa muuttaa sitä paikallaan. 420 00:22:52,210 --> 00:22:55,630 Ja vielä, muista, että voit luoda useita raja-arvot niin, että te 421 00:22:55,630 --> 00:23:00,390 voi myös jatkaa toteuttamista, ohita laajoilla koodin osia, 422 00:23:00,390 --> 00:23:04,790 ja se tulee automaattisesti tauko seuraavassa taitekohta. 423 00:23:04,790 --> 00:23:07,760 >> On todella kehittyneempiä piirteitä debuggeri, samoin. 424 00:23:07,760 --> 00:23:10,170 Mutta meidän täytyy viittaan jossain myöhemmin videoita 425 00:23:10,170 --> 00:23:14,090 jotta todella kiusata erilleen miten käyttää kyseisiä toimintoja. 426 00:23:14,090 --> 00:23:15,990 Nyt, kiitos Paljon katsomassa. 427 00:23:15,990 --> 00:23:18,080 Ja onnea virheenkorjaus.