[? DAN ARMADARAS:?] Hei, Olen [? Dan Armadaras?].
Tﺣ۳nﺣ۳ﺣ۳n aiomme Tarkastelemme virheenkorjaus.
Ei vain aiomme puhua joitakin tekniikoita,
mutta myﺣﭘs aiomme tarkastella joitakin ominaisuuksia sisﺣ۳lsi
sisﺣ۳llﺣ۳ CS50 IDE, joka mahdollistaa voit helposti debug ohjelma.
>> Vain yksi esimerkki jotain, ettﺣ۳ voi mennﺣ۳ pieleen
ja se on todella jotain ettﺣ۳ olemme jo ennen nﺣ۳hnyt.
Tﺣ۳ssﺣ۳ tapauksessa tﺣ۳mﺣ۳ on C-ohjelma joka hyvﺣ۳ksyy kokonaisluku kﺣ۳yttﺣ۳jﺣ۳,
jakaa se kahdella ja tarjoaa lﺣ۳htﺣﭘ takaisin kﺣ۳yttﺣ۳jﺣ۳lle.
Nyt mitﺣ۳ olemme nﺣ۳hneet aiemmin luentoja,
me tiedﺣ۳mme, ettﺣ۳ tﺣ۳mﺣ۳ itse aiheuttaa tietyntyyppisiin jako ongelmia
kun meillﺣ۳ on pariton mﺣ۳ﺣ۳rﺣ۳.
>> Erityisesti me vain heittﺣ۳ﺣ۳ pois mitﺣ۳ﺣ۳n desimaalipilkun jﺣ۳lkeen.
Nyt tiedﺣ۳mme, ettﺣ۳ tﺣ۳mﺣ۳ sattuu olemaan kyse.
Ja jos me ajaa se, voimme vahvistaa epﺣ۳ilyksemme, ensimmﺣ۳inen, kokoamalla.
Ja sitten, ajamalla ja kirjoittamalla pariton mﺣ۳ﺣ۳rﺣ۳.
>> Tﺣ۳mﺣ۳ ei ole mitﺣ۳ﺣ۳n uutta.
Mutta tﺣ۳mﺣ۳ on todella esimerkki vika, joka
sisﺣ۳llﺣ۳ voi olla suurempi ohjelma ettﺣ۳ on vaikeampi jﺣ۳ljittﺣ۳ﺣ۳.
Vaikka tiedﺣ۳mme, mitﺣ۳ kysymys on, tosi asian ydin
saattaa yrittﺣ۳ﺣ۳ tunnistaa erityisesti jos virhe ilmenee,
tunnistaa, mitﺣ۳ tﺣ۳mﺣ۳ ongelma on, ja sitten kiinnittﺣ۳mﺣ۳llﺣ۳ se.
Joten antaa tﺣ۳tﺣ۳ esimerkkinﺣ۳ mitﺣ۳ voisi olla jotain
ettﺣ۳ tiedﺣ۳mme jo, mutta voidaan haudata sisﺣ۳llﺣ۳ muiden osien koodia.
>> Joten avaa tﺣ۳mﺣ۳ muusta lﺣ۳hteestﺣ۳ koodi tiedosto esimerkkinﺣ۳,
tﺣ۳mﺣ۳ jako ongelma on nyt osa suurempaa ohjelmaa.
Silti saattaa olla hieman bittinen keinotekoinen, ja me
ehkﺣ۳ helposti tunnistaa sen, erityisesti
koska me vain keskustelemme.
Mutta voimme selvittﺣ۳ﺣ۳, ettﺣ۳ tﺣ۳mﺣ۳ ongelma voi olla laajemmassa mittakaavassa.
>> Jos minﺣ۳ kokoaa ja nyt ajaa se, anna pariton mﺣ۳ﺣ۳rﺣ۳,
voimme nﺣ۳hdﺣ۳, ettﺣ۳ emme saa tarkasti tuotos, joka meillﺣ۳ voi odottaa.
Tﺣ۳ssﺣ۳ nimenomaisessa tapauksessa, voisimme sanoa, ettﺣ۳ me
haluavat laskea kaikki numerot yhdestﺣ۳ jopa joitakin erityisiﺣ۳ numero.
Ja voimme nﺣ۳hdﺣ۳, ettﺣ۳ me on eri asioita
tﺣ۳ﺣ۳llﺣ۳ jos olemme syﺣﭘttﺣﭘﺣ۳, yksinkertaisesti, 0 ja 1, kun tarjoamme panos 5.
>> Joten tiedﺣ۳mme jo, ettﺣ۳ siellﺣ۳ ongelma tﺣ۳ﺣ۳llﺣ۳.
Mutta emme ehkﺣ۳ tiedﺣ۳ tarkalleen jos tﺣ۳mﺣ۳ asia todella on olemassa.
Nyt yksi niistﺣ۳ tavoista, ettﺣ۳ voimme yrittﺣ۳ﺣ۳ korjata tﺣ۳mﺣ۳n
on jotain, ettﺣ۳ olemme jo otettu kﺣ۳yttﺣﭘﺣﭘn.
Voimme vain kﺣ۳yttﺣ۳ﺣ۳ sitﺣ۳ suuremmassa mittakaavassa.
>> On line 14, meillﺣ۳ on Tﺣ۳mﺣ۳n printf toiminto,
jonka avulla voimme tulostaa valtio ja erilaisia ﻗﻗtietoja.
Ja tﺣ۳mﺣ۳ on jotain, sinun tulisi hyﺣﭘdyntﺣ۳ﺣ۳ omassa ohjelmassa
yrittﺣ۳ﺣ۳ selvittﺣ۳ﺣ۳, mitﺣ۳ on tapahtuu eri riviﺣ۳ koodia.
Joten vaikka tﺣ۳mﺣ۳ ei ole lopullinen tuotos ettﺣ۳ me todella
haluavat tuottaa ulos Tﺣ۳llﺣ۳ ohjelmalla vielﺣ۳
saattaa olla joitakin debug lausunnot jossa
voi yrittﺣ۳ﺣ۳ selvittﺣ۳ﺣ۳ tarkasti, mitﺣ۳ sisﺣ۳llﺣ۳ tapahtuu meidﺣ۳n koodi.
>> Joten tﺣ۳ssﺣ۳ tapauksessa, aion printf kanssa debug tag.
Tﺣ۳ssﺣ۳ tapauksessa tﺣ۳mﺣ۳ on vain debug string
ettﺣ۳ olen ajan laittoi jotta siitﺣ۳ tulee hyvin selkeﺣ۳ tuotoksen minun koodi
mitﺣ۳ se on, ettﺣ۳ haluan nﺣ۳yttﺣ۳ﺣ۳.
Ja lﺣ۳htﺣﭘ tﺣ۳ﺣ۳llﺣ۳ numero ettﺣ۳ olemme laskettu.
>> Tﺣ۳ssﺣ۳ tapauksessa, voisin haluavat tietﺣ۳ﺣ۳ tarkasti
mitﺣ۳ tapahtuu ennen ja jﺣ۳lkeen joitakin erityisiﺣ۳ laskenta.
Niin voisin kﺣ۳yttﺣ۳ﺣ۳ printf ennen ja sen jﺣ۳lkeen rivi koodia.
Tﺣ۳ssﺣ۳ tapauksessa, voisin jopa tehdﺣ۳ siitﺣ۳ hieman selvemmin
sanomalla debug ennen ja debug jﺣ۳lkeen niin
ettﺣ۳ en sekoita itseﺣ۳ni useita linjoja, jotka nﺣ۳yttﺣ۳vﺣ۳t samanlainen.
>> Nyt jos me kﺣ۳ﺣ۳ntﺣ۳ﺣ۳ tﺣ۳mﺣ۳n ja ajaa se, kirjoita numero, kuten viisi uudelleen,
voimme nﺣ۳hdﺣ۳, ettﺣ۳ meillﺣ۳ on nyt lﺣ۳htﺣﭘ ennen ja jﺣ۳lkeen
ja huomaat, ettﺣ۳ emme ole tehneet selkeﺣ۳ﺣ۳ jako tai selkeﺣ۳ joilla lukumﺣ۳ﺣ۳rﺣ۳stﺣ۳
ettﺣ۳ me todella haluavat tehdﺣ۳.
Nyt tﺣ۳ssﺣ۳ tapauksessa, tﺣ۳mﺣ۳ on ei oikeastaan ﻗﻗselvﺣ۳ tuotos.
Se ei oikeastaan ﻗﻗselvﺣ۳ tulos, joka haluamme pois kyseistﺣ۳ ohjelmaa.
>> Ja tﺣ۳mﺣ۳ on, jﺣ۳lleen, hieman contrived.
Mutta ehkﺣ۳ yksi niistﺣ۳ asioista, jotka voisimme tehdﺣ۳, jos erittely sanoi
ettﺣ۳ haluamme jakaa tﺣ۳mﺣ۳n 2 ja lisﺣ۳ﺣ۳ 1-- niin toisin sanoen,
haluamme pyﺣﭘristﺣ۳ﺣ۳ up-- sitten tietﺣ۳isimme, ettﺣ۳ voisimme
tehdﺣ۳ kyseisen asia, tﺣ۳ssﺣ۳ tapauksessa.
Nyt tﺣ۳ﺣ۳llﺣ۳ tiedﺣ۳mme, ettﺣ۳ meillﺣ۳ on voi lisﺣ۳tﺣ۳ 1 meidﺣ۳n puolittunut numero.
>> Katsotaanpa kﺣ۳ﺣ۳ntﺣ۳ﺣ۳ tﺣ۳mﺣ۳n ja vahvistaa, ettﺣ۳ tﺣ۳mﺣ۳
kﺣ۳yttﺣ۳ytyy siten, ettﺣ۳ haluamme.
Voimme nﺣ۳hdﺣ۳, ettﺣ۳ nyt ennen ottaa, meillﺣ۳ on numero 5.
Saatuaan, meillﺣ۳ on numero 3, joka mukaan meidﺣ۳n toiveiden,
halusimme tehdﺣ۳.
Mutta jos katsomme tuotos tﺣ۳ﺣ۳llﺣ۳, voimme
nﺣ۳hdﺣ۳, ettﺣ۳ meillﺣ۳ olisi toinen bug kokonaan, mikﺣ۳ on
ettﺣ۳ me aloitamme count 0.
>> Nyt taas, tﺣ۳mﺣ۳ on jotain ettﺣ۳ olemme nﺣ۳hneet aiemmin
ja voimme korjata melko helposti.
Mutta tﺣ۳ssﺣ۳ tapauksessa, me oli myﺣﭘs hyﺣﭘtyﺣ۳
kﺣ۳yttﺣ۳ﺣ۳ printf selvitys suoraan sisﺣ۳llﺣ۳ silmukan
tietﺣ۳ﺣ۳ tarkasti missﺣ۳ ettﺣ۳ virhe oli tapahtumassa.
Joten printf lausunnot ovat erittﺣ۳in hyﺣﭘdyllinen auttaa
voit mﺣ۳ﺣ۳rittﺣ۳ﺣ۳ missﺣ۳, juuri lﺣ۳hdekoodia,
tietty virhe tapahtuu.
>> Ja se on myﺣﭘs tﺣ۳rkeﺣ۳ﺣ۳ ymmﺣ۳rtﺣ۳ﺣ۳, ettﺣ۳, kuten me kirjoittaa koodia,
olisimme oletukset tilasta ohjelman.
Tai voisimme olla oletukset mitﺣ۳ osa ohjelmaa
on todella oikea tai vﺣ۳ﺣ۳rﺣ۳, kun myﺣﭘhemmin kun rakennamme ettﺣ۳ ohjelmasta
ja tehdﺣ۳ siitﺣ۳ osa monimutkainen ja suurempia ohjelma
ettﺣ۳ ymmﺣ۳rrﺣ۳mme, ettﺣ۳ jostakin Tﺣ۳mﺣ۳n on todella buginen.
>> Kﺣ۳yttﺣ۳mﺣ۳llﺣ۳ printf voi todella auttaa kaventaa ja tunnistaa
alueiden ohjelma, joka saa kﺣ۳yttﺣ۳ytyisi juuri niin, ettﺣ۳ me
odottaa, perustuu meidﺣ۳n oletuksiin.
Mutta on muita tyﺣﭘkaluja saatavilla, samoin,
joiden avulla voimme yrittﺣ۳ﺣ۳ selvittﺣ۳ﺣ۳ missﺣ۳ virhe tapahtuu
ja myﺣﭘs, erityisesti, mitkﺣ۳ asiat tapahtuu sisﺣ۳llﺣ۳ ohjelman.
>> Joten kﺣ۳yttﺣ۳mﺣ۳llﺣ۳ printf on hyvin hyﺣﭘdyllinen, kun halutaan
tunnistamaan tietyillﺣ۳ aloilla ohjelma, joka on joitakin bug.
Mutta se myﺣﭘs tulee tylsiﺣ۳ jonkin ajan kuluttua.
Tﺣ۳ssﺣ۳ tapauksessa tﺣ۳mﺣ۳ on suhteellisen yksinkertainen ohjelma
vain yksi tai kaksi muuttujaa.
Ja se on erittﺣ۳in helppo meille tulostaa arvon niitﺣ۳ muuttujia
yhteydessﺣ۳ suurempi ohjelman.
>> Mutta saatamme olla eri ohjelma, joka on monia muuttujia.
Ja se ei voi olla tﺣ۳ysin niin helppokﺣ۳yttﺣﭘinen printf
yrittﺣ۳ﺣ۳ arvioida, mitﺣ۳ tapahtuu ja jokainen nﺣ۳istﺣ۳ muuttujista
koska ohjelma on tﺣ۳ytﺣ۳ntﺣﭘﺣﭘnpanosta.
On ohjelma, joka on olemassa kutsutaan debuggeri ohjelma.
Tﺣ۳ssﺣ۳ tapauksessa, joka me kﺣ۳yttﺣﭘ on GNU debuggeri, tai GDB,
joka antaa meille mahdollisuuden tarkastaa sisﺣ۳isen toimintaa ohjelman paljon
yksityiskohtaisesti.
>> Voimme todella toteuttaa GDB komentoriviltﺣ۳
tﺣ۳ssﺣ۳ yksinkertaisesti kirjoittamalla GDB ja komento, ettﺣ۳ haluamme debug.
Tﺣ۳ssﺣ۳ tapauksessa laskea.
Nyt tﺣ۳ssﺣ۳ tapauksessa, voimme nﺣ۳hdﺣ۳, ettﺣ۳ se tuo meidﺣ۳t nopeasti joka sanoo GDB.
Ja voimme todella suorittaa komentoja GDB
todella aloittaa suorittamisen ohjelma, lopeta tietyissﺣ۳ kohdissa,
arvioida muuttujat ja tarkastaa muuttujia
olemassa ohjelmassa tilassa tuona ajankohtana,
ja niin edelleen ja niin edelleen.
Se tarjoaa paljon voimaa meille.
>> Mutta se vain niin, ettﺣ۳ CS50 IDE myﺣﭘs
tarjoaa GUI tai kﺣ۳yttﺣ۳jﺣ۳ kﺣ۳yttﺣﭘliittymﺣ۳ GDB ettﺣ۳
voimme tehdﺣ۳ tﺣ۳mﺣ۳n ilman komentoriviltﺣ۳ mitﺣ۳ﺣ۳n
tai ollenkaan jopa.
Ettﺣ۳ voin kﺣ۳yttﺣ۳ﺣ۳, ettﺣ۳ on kﺣ۳yttﺣ۳ﺣ۳ debug-painiketta
klo hyvin alkuun CS50 IDE.
Nyt aikaisemmin, mitﺣ۳ meillﺣ۳ on nﺣ۳hnyt on, ettﺣ۳ kﺣ۳ytﺣ۳mme komentoa
linja kﺣ۳ﺣ۳ntﺣ۳ﺣ۳ ja suorita ohjelma.
>> Debug-painike tekee molemmat nﺣ۳mﺣ۳ toimenpiteet.
Mutta se myﺣﭘs tuo esiin debuggeri vﺣ۳lilehti ﺣ۳ﺣ۳rimmﺣ۳isenﺣ۳ oikealla
joka antaa meille mahdollisuuden tarkastaa lajikkeen ominaisuuksien ohjelman
koska se on tﺣ۳ytﺣ۳ntﺣﭘﺣﭘnpanovaltiossa.
Jos minﺣ۳ sitten debug, tﺣ۳ssﺣ۳ tapauksessa, se tuo esiin
uusi vﺣ۳lilehti konsolin ikkuna alareunassa.
>> Ja voit nﺣ۳hdﺣ۳, ettﺣ۳ tﺣ۳mﺣ۳ vﺣ۳lilehti on joitakin tietoja huipulla.
Ja voimme pitkﺣ۳lti sivuuttaa tﺣ۳mﺣ۳n.
Mutta yksi niistﺣ۳ asioista, ettﺣ۳ haluamme huomata
on, ettﺣ۳ se tuottaa sama asia, ettﺣ۳ me
saisi jos yritimme ajaa tekemﺣ۳si C-ohjelma vuonna pﺣ۳ﺣ۳teikkunassa.
>> Tﺣ۳ﺣ۳llﺣ۳ voimme nﺣ۳hdﺣ۳ se on kﺣ۳ynnissﺣ۳ kalahtaa, ja sillﺣ۳ on erilaisia ﻗﻗlippuja,
ja se on koottaessa count.c tiedoston, joka oli valitun vﺣ۳lilehden aikaan
ettﺣ۳ osuin debug.
Joten tﺣ۳mﺣ۳ on erittﺣ۳in hyﺣﭘdyllinen, koska nyt kﺣ۳yttﺣ۳ﺣ۳ tﺣ۳tﺣ۳ debug painiketta,
voimme samanaikaisesti koota ja sitten suorita ohjelma, me todella
halua ajaa.
>> Lippua, joka on tﺣ۳rkeitﺣ۳, tﺣ۳ssﺣ۳ tapauksessa,
olemme todella kﺣ۳yttﺣ۳nyt pisimpﺣ۳ﺣ۳n
mutta myﺣﭘs vain tekivﺣ۳t joitakin kﺣ۳si heiluttaen [ﺣ۳ﺣ۳netﺣﭘn], joka
on tﺣ۳mﺣ۳ yksi tﺣ۳ﺣ۳llﺣ۳.
Vuonna kalahtaa, sanotaan -ggdb3.
Tﺣ۳ssﺣ۳ tapauksessa, mitﺣ۳ olemme kertoo kalahtaa, meidﺣ۳n kﺣ۳ﺣ۳ntﺣ۳jﺣ۳,
on, ettﺣ۳ haluamme kﺣ۳ﺣ۳ntﺣ۳ﺣ۳ meidﺣ۳n ohjelma.
Mutta myﺣﭘs mitﺣ۳ nimeltﺣ۳ﺣ۳n symboli tiedot
niin ettﺣ۳ kﺣ۳ﺣ۳ntﺣ۳jﺣ۳ todella on pﺣ۳ﺣ۳sy on paljon taustatiedoista
sisﺣ۳llﺣ۳ ohjelma.
>> Tarkemmin sanottuna, numero toimintoja, minulla on,
nimet toimintoja, muuttujat, tyypit
ettﺣ۳ nﺣ۳mﺣ۳ muuttujat ovat, ja erilaisia muita asioita, jotka auttavat debuggeri
suoriutua.
Nyt jotain muuta se on tﺣ۳rkeﺣ۳ﺣ۳ mainita
kun me keskustelemme kﺣ۳ynnissﺣ۳ ohjelman tﺣ۳llﺣ۳ tavalla.
>> Huomaa, ettﺣ۳ se on todella esille uuden vﺣ۳lilehden meidﺣ۳n konsoli
alareunassa.
Meillﺣ۳ ei enﺣ۳ﺣ۳ tarvitse vuorovaikutuksessa suoraan pﺣ۳ﺣ۳teikkuna.
Mutta tﺣ۳mﺣ۳ uusi vﺣ۳lilehti on todella pﺣ۳ﺣ۳teikkuna.
Se vain on nimenomaan kﺣ۳ynnissﺣ۳ ohjelma, olemme luoneet.
>> Huomaa, ettﺣ۳ alareunassa, vuonna yhdessﺣ۳ joidenkin ulostulo
mukaan kalahtaa kﺣ۳ﺣ۳ntﺣ۳jﺣ۳ ja GDB, jota voidaan pitkﺣ۳lti sivuuttaa,
se todella osoittaa lﺣ۳htﺣﭘ meidﺣ۳n ohjelma alareunassa.
Nyt on tﺣ۳rkeﺣ۳ﺣ۳ ymmﺣ۳rtﺣ۳ﺣ۳ ettﺣ۳ tﺣ۳mﺣ۳ ikkuna tosiasiallisesti
nﺣ۳yttﺣ۳ﺣ۳ ulostulo ohjelmasi
mutta myﺣﭘs voi hyvﺣ۳ksyﺣ۳ syﺣﭘttﺣ۳ﺣ۳ kyseisen ohjelman, samoin.
>> Niin huomaa, ettﺣ۳ sanoo kirjoita numero,
joka on sama tuotos, joka meillﺣ۳ oli oli pﺣ۳ﺣ۳teikkunassa ennen.
Mutta se on nyt esitetty tﺣ۳ssﺣ۳ uudessa vﺣ۳lilehdessﺣ۳.
Voin syﺣﭘttﺣ۳ﺣ۳ numeron.
Ja se todella toimivat odotamme
nﺣ۳yttﺣ۳ﺣ۳ meille meidﺣ۳n debug, lﺣ۳htﺣﭘ, tuotos, joka voisi olla buginen,
kuten olemme nﺣ۳hneet aiemmin.
Ja alareunassa, se tosin on lisﺣ۳ﺣ۳ tuotoksen
BKT vain, ettﺣ۳ tﺣ۳mﺣ۳ ohjelma on valmis.
>> Nyt kun nﺣ۳it tﺣ۳ssﺣ۳ Erityisesti kulkevat,
se ei ole erityisen hyﺣﭘdyllinen, koska jopa
vaikka meillﺣ۳ oli debuggeri valikko tulevat up, tﺣ۳mﺣ۳ oli vielﺣ۳ kﺣ۳ynnissﺣ۳ ohjelma.
Ei missﺣ۳ﺣ۳n vaiheessa se todella tauko toteuttamisesta meille
pystyﺣ۳ tarkastaa kaikki muuttujien sisﺣ۳llﺣ۳.
Jotain muuta ettﺣ۳ meidﺣ۳n on tehtﺣ۳vﺣ۳, jotta
pﺣ۳ﺣ۳stﺣ۳ GDB tunnustaa, ettﺣ۳ haluamme keskeyttﺣ۳ﺣ۳ ohjelman toteuttamisen
eikﺣ۳ vain anna sen jatkaa normaalisti kuten missﺣ۳ tahansa muussakin tapauksessa.
>> Jotta keskeyttﺣ۳ﺣ۳ suorituksen, joillakin tietyillﺣ۳ linja,
meidﺣ۳n on luotava mitﺣ۳ kutsutaan taitekohta.
Ja taitekohta on hyvin helposti luotu tﺣ۳ssﺣ۳ CS50 IDE ottamalla hiirellﺣ۳
ja napsauttamalla suoraan vasemmalle Joidenkin tietylle riville.
Kun minﺣ۳, ettﺣ۳, punainen piste nﺣ۳yttﺣ۳ﺣ۳, mikﺣ۳ osoittaa
ettﺣ۳ linja on nyt taitekohta.
>> Ja seuraavan kerran juoksen GDB, se pysﺣ۳htyy toteutuneesta ettﺣ۳ taitekohta
kun se saavuttaa Koodirivin.
Nyt tﺣ۳mﺣ۳ on tﺣ۳rkeﺣ۳ asia ymmﺣ۳rtﺣ۳ﺣ۳
ettﺣ۳ se ei ole vﺣ۳lttﺣ۳mﺣ۳ttﺣ۳ tapauksessa, ettﺣ۳ jokainen rivi koodia
on todella saatavilla.
Jos olisin luoda toiminto tﺣ۳nne, sillﺣ۳ example-- mitﺣ۳tﺣﭘn f--
ja vain tehdﺣ۳ tulosta linja here-- hei world-- jos en koskaan kutsua tﺣ۳tﺣ۳ toimintoa,
se on niin, ettﺣ۳, jos otan taitekohta tﺣ۳ﺣ۳llﺣ۳,
toiminto ei koskaan kutsutaan.
Ja nﺣ۳in ollen, tﺣ۳mﺣ۳ erityisesti taitekohta
ei koskaan todella keskeyttﺣ۳ﺣ۳ Ohjelman toteuttamista.
>> Joten sanoa, ettﺣ۳ olen oikein luoda taitekohta joitakin rivi koodia
ettﺣ۳ todella toteutetaan.
Nyt tﺣ۳ssﺣ۳ tapauksessa, tﺣ۳mﺣ۳ on ensimmﺣ۳inen rivi pﺣ۳ﺣ۳tehtﺣ۳vﺣ۳.
Joten se varmasti tapaus ettﺣ۳, heti kun aloitan toteuttamista,
ensimmﺣ۳inen rivi saavutetaan.
GDB pysﺣ۳htyy toteuttamista.
Ja sitten, minﺣ۳ voi vuorovaikutuksessa debugger.
>> Voit asettaa useita rivejﺣ۳ breakpoints, jos haluat.
Voimme myﺣﭘs luoda riviin tﺣ۳ﺣ۳llﺣ۳ tﺣ۳llﺣ۳ segmentillﺣ۳ koodin
ettﺣ۳ ei koskaan saavuteta.
Ja voimme myﺣﭘs asettaa yhden jﺣ۳ljempﺣ۳nﺣ۳.
Syy siihen, ettﺣ۳ olisimme halua tehdﺣ۳ tﺣ۳tﺣ۳ me will
mennﺣ۳ hieman enemmﺣ۳n yksityiskohtaisesti vain hetken.
Joten nyt, haluan vain poistaa nﺣ۳mﺣ۳ ylimﺣ۳ﺣ۳rﺣ۳iset taitepisteissﺣ۳
jotta voimme katsoa mitﺣ۳ tapahtuu kun minulla on yksi tauko
vaiheessa minun ohjelma.
Olen tehnyt joitakin muutokset tﺣ۳hﺣ۳n ohjelmaan.
Joten minun tﺣ۳ytyy tallentaa sen.
Aion klikkaa debug jotta voin alkaa kokoaminen ja sitten
toteuttaminen debuggeri.
>> Tulemme nﺣ۳kemﺣ۳ﺣ۳n, ettﺣ۳ kun hetkiﺣ۳, line ettﺣ۳ me valittu tauko
kohta on korostettu keltaisella.
Voimme myﺣﭘs huomata, ettﺣ۳ ylempi aivan debug paneeli
ettﺣ۳ tauko kuvake on muuttunut pieneen toistokuvaketta.
Tﺣ۳mﺣ۳ tarkoittaa sitﺣ۳, ettﺣ۳ meillﺣ۳ on tauko toteutus, tﺣ۳ssﺣ۳ tapauksessa.
Ja lyﺣﭘmﺣ۳llﺣ۳ toistopainiketta olisi jotta voimme jatkaa toteutus
tﺣ۳ssﺣ۳ erityinen kohta.
>> Huomaa, ettﺣ۳ on olemassa pari muuta painikkeet saatavilla debug paneeli,
yhtﺣ۳ hyvin.
Askel yli, jossa voin suorittaa ettﺣ۳ yhtﺣ۳ riviﺣ۳ koodia
ja askel yli ettﺣ۳ linja seuraava, joka tﺣ۳ssﺣ۳ tapauksessa,
merkitsisi sitﺣ۳, ettﺣ۳ printf lauseke suoritetaan.
Ja se sitten tauko teloituksen linja 13, kuten niin.
>> Ja siellﺣ۳ on myﺣﭘs askel osaksi toiminto, joka
on hyﺣﭘdyllistﺣ۳, jos olen luonut muut toiminnot muualla lﺣ۳hdekoodia.
Ja haluan astua ne toiminnot sijaan
suorittaa tﺣ۳mﺣ۳ tehtﺣ۳vﺣ۳ kokonaisuudessaan.
Mutta me tarkastelemme enemmﺣ۳n vaiheessa osaksi toimivat vain hetken.
Nyt huomaat joitakin muita asioita, jotka oikeasti olemassa tﺣ۳mﺣ۳n debug paneeli.
>> Meillﺣ۳ on tﺣ۳mﺣ۳ paneeli kutsutaan kutsupino, joka nﺣ۳yttﺣ۳ﺣ۳ meille
missﺣ۳ tarkalleen olemme.
Tﺣ۳ssﺣ۳ tapauksessa olemme sisﺣ۳llﺣ۳ n pﺣ۳ﺣ۳tehtﺣ۳vﺣ۳.
Meidﺣ۳n kﺣ۳sikirjoitus on nimeltﺣ۳ﺣ۳n count.c.
Ja me sattuvat olemaan rivi 13, sarake yksi, joka
Juuri korostettu alue lﺣ۳hdekoodin osoittaa, samoin.
>> Nyt huomaa, ettﺣ۳ tﺣ۳mﺣ۳ nﺣ۳kyy myﺣﭘs alle paikallinen muuttuja jakso
kaikki muuttujia esiintyy tﺣ۳tﺣ۳ toimintoa.
On tﺣ۳rkeﺣ۳ﺣ۳ huomata, ettﺣ۳ kaikki muuttujat
ilmestyy tﺣ۳mﺣ۳n paikallisen muuttuja kohta sisﺣ۳llﺣ۳ toiminto,
jo ennen kuin ne on mﺣ۳ﺣ۳ritelty.
Voimme nﺣ۳hdﺣ۳ tﺣ۳ﺣ۳llﺣ۳, ettﺣ۳ meillﺣ۳ on muuttuva nimeltﺣ۳ﺣ۳n num, on oletusarvo 0,
ja se on tyyppiﺣ۳ int.
>> Nyt ennen kuin me itse alustaa kaikkia nﺣ۳itﺣ۳ muuttujia,
emme ole vﺣ۳lttﺣ۳mﺣ۳ttﺣ۳ taattu nﺣ۳hdﺣ۳ arvoa 0.
Ja riippuu muista teloituksista ettﺣ۳ olet tehnyt
ja valtion oman muistista, kun olet todella ajaa tﺣ۳tﺣ۳ ohjelmaa,
saatat huomata, ettﺣ۳ olet nﺣ۳e arvoja 0
ja, sen sijaan, joitakin muita hullu numeroita.
>> Mutta ﺣ۳lﺣ۳ murehdi.
Se ei tule olemaan merkityksellisiﺣ۳ asti voit itse alustaa arvo.
Nyt tﺣ۳ssﺣ۳ tapauksessa, voimme nﺣ۳hdﺣ۳, ettﺣ۳ Olen tehnyt joitakin tuotoksia.
Ja minﺣ۳, juuri nyt, keskeytetty suoritus.
Mutta tﺣ۳ssﺣ۳ tapauksessa, mitﺣ۳ En todellakaan halua tehdﺣ۳
on nyt askel yli tﺣ۳mﺣ۳n linjan koodia jotta voin todella
kysellﺣ۳ kﺣ۳yttﺣ۳jﺣ۳ltﺣ۳ ettﺣ۳ int ettﺣ۳ haluamme kﺣ۳yttﺣ۳ﺣ۳ ohjelmaamme.
>> Nyt tﺣ۳ssﺣ۳ tapauksessa, kun Lﺣﭘin askel yli, ilmoitus
ettﺣ۳ Tauko tai pikemminkin Jatka painike on muuttunut tﺣ۳hﺣ۳n Tauko-painiketta
koska tﺣ۳mﺣ۳ koodi on todella tﺣ۳ytﺣ۳ntﺣﭘﺣﭘnpanosta.
Mitﺣ۳ tapahtuu nyt on, ettﺣ۳ se on
odottaa meitﺣ۳ syﺣﭘttﺣ۳ﺣ۳ joitakin tietoja kuten voimme nﺣ۳hdﺣ۳ meidﺣ۳n tulostustekstiﺣ۳
alareunassa.
>> Joten juuri nyt, tﺣ۳mﺣ۳ on ei oikeastaan ﻗﻗkeskeytetty,
vaikka se, tavallaan nﺣ۳yttﺣ۳ﺣ۳ olla koska mitﺣ۳ﺣ۳n ei tapahdu.
Mutta se vain niin, ettﺣ۳ minun erityistapaus linja 13,
Odotan kﺣ۳yttﺣ۳jﺣ۳n syﺣﭘtettﺣ۳.
Ja niin GDB ei voi tarkastaa ohjelma koska se on kﺣ۳ynnissﺣ۳.
>> Nyt seuraavan kerran astun jotkut input-- niin minﺣ۳ kirjoita ettﺣ۳ numero 5,
kuten olemme nﺣ۳hneet past-- osuma Palaa, ja me
huomata, ettﺣ۳ heti, GDB taukoja ja jﺣ۳lleen korostaa seuraavalle riville.
Mutta huomaan, ettﺣ۳ nyt, kun Tﺣ۳mﺣ۳n vuoksi meidﺣ۳n kirjoittamalla arvon,
olemme pﺣ۳ivittﺣ۳neet ettﺣ۳ arvo sisﺣ۳llﺣ۳ meidﺣ۳n paikallisia muuttujia, jotka
on erittﺣ۳in hyﺣﭘdyllistﺣ۳ tietﺣ۳ﺣ۳ tarkasti mitﺣ۳ se mﺣ۳ﺣ۳rﺣ۳ oli muistissa.
>> Nyt voin antaa tﺣ۳mﺣ۳n ohjelman jatkaa pelaa loppuun asti sen toteuttamista
lyﺣﭘmﺣ۳llﺣ۳ Jatka.
Voimme nﺣ۳hdﺣ۳, ettﺣ۳ hyvin nopeasti tekee ohjelman loppuun tﺣ۳ytﺣ۳ntﺣﭘﺣﭘnpanosta
kanssa saman tuotoksen ettﺣ۳ me oli ennen, debuggeri sulkeutuu,
ja nyt tﺣ۳mﺣ۳ ohjelma on tﺣ۳ysin pysﺣ۳htynyt.
>> Osoitan, ettﺣ۳ vain tarkoituksiin nﺣ۳hdﺣ۳ mitﺣ۳
tapahtuu, kun me todella osuma Jatka.
Mutta me todella aiomme halua mennﺣ۳ takaisin tﺣ۳hﺣ۳n ohjelmaan
jotta voimme yrittﺣ۳ﺣ۳ debug Juuri mitﺣ۳ tapahtuu.
Nyt olen kﺣ۳yttﺣ۳en debuggeri, sallitte ei tarvitse nﺣ۳itﺣ۳ debug printf lausunnot.
>> Niin voisin poistaa niitﺣ۳ minﺣ۳ teen nyt vain mennﺣ۳ takaisin meidﺣ۳n yksinkertaisempaa koodi
ettﺣ۳ meillﺣ۳ oli hetki sitten.
Nyt kun tallennan ohjelmoida ja suorittaa sen,
se, jﺣ۳lleen, mene ettﺣ۳ ensimmﺣ۳iset taitekohta ettﺣ۳ minulla oli verkossa 11.
Ja minﺣ۳ voi tarkastaa minun muuttujia kuin haluan tehdﺣ۳.
>> Se vain niin, ettﺣ۳ tﺣ۳mﺣ۳ osa ei ole kovin kiinnostava,
Ja tiedﺣ۳n, ettﺣ۳ aion tulostaa tﺣ۳tﺣ۳ vﺣ۳itettﺣ۳.
Anna numero.
Ja sitten, tiedﺣ۳n, ettﺣ۳ aion pyytﺣ۳ﺣ۳ kﺣ۳yttﺣ۳jﺣ۳ltﺣ۳ ettﺣ۳ kokonaisluku.
Joten ehkﺣ۳, en oikeastaan ﻗﻗhalua muuttaa minun taitekohta hieman alempana.
>> Voit poistaa taitepisteissﺣ۳ napsauttamalla, jﺣ۳lleen, suoraan
vasemmalla ettﺣ۳ rivinumero.
Ettﺣ۳ red dot katoaa osoittaen ettﺣ۳ taitekohta on nyt poissa.
Nyt tﺣ۳ssﺣ۳ tapauksessa, suoritus on keskeytetty.
Ja niin se ei ole todella tulee jatkaa kyseisessﺣ۳ tapauksessa.
Mutta voin asettaa tauko kohta hieman myﺣﭘhemmin.
>> Ja kun minﺣ۳ nyt jatkan koodi, se jatkuu ja kerro
piste ettﺣ۳ taitekohta.
Jﺣ۳lleen osuin Jatka.
Ei tunnu mitﺣ۳ﺣ۳n tapahtuu.
Mutta se johtuu minun koodi odottaa syﺣﭘtteitﺣ۳.
Minﺣ۳ tulee numero 5, paina Enter, ja nyt seuraava taitekohta tulevat kﺣ۳rsimﺣ۳ﺣ۳n.
>> Nyt tﺣ۳ssﺣ۳ tapauksessa, tﺣ۳mﺣ۳ on koodiriviﺣ۳
ettﺣ۳ ennen, tiesimme sattui olemaan buginen.
Joten arvioida, mitﺣ۳ tapahtuu juuri tﺣ۳ssﺣ۳ vaiheessa.
Kun rivi nﺣ۳kyy korostettuna, tﺣ۳mﺣ۳ linja ei ole vielﺣ۳ pantu tﺣ۳ytﺣ۳ntﺣﭘﺣﭘn.
Joten tﺣ۳ssﺣ۳ tapauksessa, voimme nﺣ۳hdﺣ۳ ettﺣ۳ minulla on useita, joka
Minulla on kokonaisluku nimeltﺣ۳ﺣ۳n num, jonka arvo 5.
Ja aion esiintyy jotkut matematiikka ettﺣ۳ numero.
>> Jos astun yli ettﺣ۳, voimme huomata, ettﺣ۳ arvo num
on muuttunut mukaisesti aritmeettinen ettﺣ۳ olemme todella tehneet.
Ja nyt, ettﺣ۳ olemme sisﺣ۳llﺣ۳ tﺣ۳mﺣ۳n silmukan
tai nyt ettﺣ۳ silmukka itsessﺣ۳ﺣ۳n on korostettu,
nﺣ۳emme, ettﺣ۳ meillﺣ۳ on uusi muuttuja nimeltﺣ۳ i ettﺣ۳
aiotaan kﺣ۳yttﺣ۳ﺣ۳, ettﺣ۳ silmukka.
>> Muistakaa ennen, ettﺣ۳ olen mainitsi, ettﺣ۳ joskus olet
nﺣ۳kemﺣ۳ﺣ۳n jonkinlainen hullu numerot oletukseksi ennen numero
tai ettﺣ۳ muuttuja on todella alustettu.
Voimme nﺣ۳hdﺣ۳, ettﺣ۳ juuri tﺣ۳ﺣ۳llﺣ۳ tﺣ۳mﺣ۳n muuttujan
nimeltﺣ۳ﺣ۳n i, joka ei ole vielﺣ۳ alustettu
aikaan esiin.
Mutta voimme nﺣ۳hdﺣ۳, ettﺣ۳ se on jonkin verran numero ettﺣ۳ emme oikeastaan ﻗﻗodotamme.
>> Se on okei.
ﺣlﺣ۳ ole huolissasi siitﺣ۳ koska meillﺣ۳ ei oikeastaan
alustettu, ettﺣ۳ mﺣ۳ﺣ۳rﺣ۳ kunnes askel yli tﺣ۳mﺣ۳ rivi ja arvo
i on alustettu arvoon 1..
Niin nﺣ۳hdﺣ۳, ettﺣ۳ se on todella tapauksessa, nyt askel yli.
Voimme nyt nﺣ۳hdﺣ۳, ettﺣ۳ linja on suoritettu.
Ja nyt esiin tﺣ۳mﺣ۳ printf linja.
>> Ja voimme nyt nﺣ۳hdﺣ۳, miten arvomme i ja 3 ovat muuttuneet ajan myﺣﭘtﺣ۳.
Tﺣ۳mﺣ۳ on erittﺣ۳in hyﺣﭘdyllistﺣ۳ tehdﺣ۳, itse asiassa, on askel yli linjat toistuvasti.
Ja voit lﺣﭘytﺣ۳ﺣ۳ mitﺣ۳ todella tapahtuu sisﺣ۳llﺣ۳ oman silmukan
ja mitﺣ۳ tapahtuu muuttujat sisﺣ۳llﺣ۳ ettﺣ۳ silmukka
kuin ohjelman suoritus tapahtuu yksi askel kerrallaan.
>> Nyt tﺣ۳ssﺣ۳ vaiheessa, minﺣ۳ astui yli juuri tarpeeksi
ettﺣ۳ minﺣ۳ nyt olen lopussa minun ohjelma.
Jos astun yli ettﺣ۳, se todella lopettaa toteutus
kuten olemme nﺣ۳hneet aiemmin.
Saanen uudelleen tﺣ۳mﺣ۳n, jﺣ۳lleen kerran, niin ettﺣ۳ voin huomauttaa jotain muuta pois,
yhtﺣ۳ hyvin.
>> Tﺣ۳ssﺣ۳ tapauksessa on nyt pyytﺣ۳ﺣ۳ minua, taas,
useita, joka Aion jﺣ۳lleen, anna.
Mutta tﺣ۳llﺣ۳ kertaa, aion syﺣﭘttﺣ۳ﺣ۳ suurempaa mﺣ۳ﺣ۳rﺣ۳ﺣ۳ niin, ettﺣ۳ silmukka
tulee kerrata kertaa.
Tﺣ۳ssﺣ۳ tapauksessa, aion anna arvo 11.
>> Nyt uudelleen, koska olin asettanut taitekohta rivillﺣ۳ 15,
se tulee esiin, ettﺣ۳ linja.
Voimme nﺣ۳hdﺣ۳, ettﺣ۳ meidﺣ۳n numero 11 on oikein
edustettuina meidﺣ۳n paikallisia muuttujia.
Stepping yli ettﺣ۳ voimme nyt katsoa mitﺣ۳ tapahtuu meidﺣ۳n arvo i
kuten me edetﺣ۳ sisﺣ۳llﺣ۳ tﺣ۳mﺣ۳n silmukan.
Se saa kasvaa joka kerta kun huipulle ettﺣ۳ silmukka.
>> Nyt yksi asioita, jotka saattavat olla hyﺣﭘdyllistﺣ۳ tehdﺣ۳ suorituksen aikana
Tﺣ۳mﺣ۳n ohjelman on minulle todella muuttaa muuttujat midstream nﺣ۳hdﺣ۳
mitﺣ۳ tapahtuu minun ohjelma.
Tﺣ۳ssﺣ۳ tapauksessa en voi itse tuplaklikkaa arvo.
Huomaa, ettﺣ۳ se tulee tekstikenttﺣ۳ﺣ۳n.
>> Nyt voin tulla eri Arvostamme yhteensﺣ۳
miten minun ohjelma kﺣ۳yttﺣ۳ytyy kun olen muuttanut ettﺣ۳ muuttuja.
Nyt tﺣ۳ssﺣ۳ tapauksessa, muuttuva Nyt sisﺣ۳ltﺣ۳ﺣ۳ arvon 10.
Mutta ohjelma on edelleen keskeytetty toteuttamiseksi.
Kun astun yli, nﺣ۳en ettﺣ۳ arvo i, joka tulin 10,
ei ole suurempi kuin arvo num, joka heti aiheuttaa silmukka
lopettaa tﺣ۳ytﺣ۳ntﺣﭘﺣﭘnpanosta.
>> Nyt se ei ole ainoa Miksi olisit
haluat muokata muuttujan paikallaan.
Saatat todella haluavat yrittﺣ۳ﺣ۳ muuttaa sitﺣ۳ niin
ettﺣ۳ voit jatkaa toteuttaminen silmukan
tai niin, ettﺣ۳ voit muokata jotain arvoa, ennen kuin se
saavuttaa tiettyjﺣ۳ joukko aritmeettinen ettﺣ۳ olet aikeissa suorittaa.
>> Joten nyt me todella muuttaa arvo, koska ohjelman tﺣ۳ytﺣ۳ntﺣﭘﺣﭘnpanosta,
se aiheutti silmukka lopettaa ennenaikaisesti, yhtﺣ۳kkiﺣ۳, i
sattui olemaan suurempi kuin arvo NUM, eli ettﺣ۳ silmukka
ei enﺣ۳ﺣ۳ tarvita suoritettavaksi.
Lisﺣ۳ksi se sattui olemaan tapauksessa, ettﺣ۳ muutimme arvo I
kun linja 17 korostettiin, joka oli ajankohtana
ettﺣ۳ silmukan suorittamisen tosiasiallisesti arvioidaan.
>> Jos olisin muuttanut arvo I eri linja, sanovat 19,
olisimme nﺣ۳hneet eri kﺣ۳yttﺣ۳ytyminen koska linja 19 olisi
on suoritettu ennen silmukka ehto arvioida uudelleen.
Nyt tﺣ۳ssﺣ۳ vaiheessa, olen, taas, lopussa tﺣ۳mﺣ۳n ohjelman.
Ja voin antaa tﺣ۳mﺣ۳n siirtyﺣ۳ anna minun ohjelma lopettaa luonnollisesti.
Mutta on pari asiaa jotka ovat tﺣ۳rkeitﺣ۳ ottaa pois
mistﺣ۳ tﺣ۳ssﺣ۳ keskustelussa.
Sinun tﺣ۳ytyy arvioida omat oletukset
miten koodi pitﺣ۳ﺣ۳ kﺣ۳yttﺣ۳ytyﺣ۳.
Aina luulet, ettﺣ۳ jotkut pala koodia tiedﺣ۳t sattuu tyﺣﭘskennellﺣ۳,
jotka saattavat olla punainen lippu mennﺣ۳ takaisin ja arvioida, ja varmista
ettﺣ۳ oletus miten tﺣ۳mﺣ۳ koodi toimii
on todella totta, miten se on ilmaistuna lﺣ۳hdekoodia.
>> Mutta vielﺣ۳ pisteeseen oli, kun kﺣ۳ytﺣ۳mme debuggeri,
voit laittaa raja-arvot osoitteessa eri riviﺣ۳ koodia,
joka aiheuttaa virheenkorjaus tauko toteuttamista kussakin nﺣ۳istﺣ۳ linjat
jotta voit arvioida muistiin tai jopa muuttaa sitﺣ۳ paikallaan.
Ja vielﺣ۳, muista, ettﺣ۳ voit luoda useita raja-arvot niin, ettﺣ۳ te
voi myﺣﭘs jatkaa toteuttamista, ohita laajoilla koodin osia,
ja se tulee automaattisesti tauko seuraavassa taitekohta.
>> On todella kehittyneempiﺣ۳ piirteitﺣ۳ debuggeri, samoin.
Mutta meidﺣ۳n tﺣ۳ytyy viittaan jossain myﺣﭘhemmin videoita
jotta todella kiusata erilleen miten kﺣ۳yttﺣ۳ﺣ۳ kyseisiﺣ۳ toimintoja.
Nyt, kiitos Paljon katsomassa.
Ja onnea virheenkorjaus.