[Powered by Google Translate] GDB, GNU projekti siluri on võimas silumine vahend C,
koos paljude teiste keelte.
See võimaldab teil tuhnima sees C programme samas nad täidesaatva,
ja see annab teile võimaluse täpselt näha, mis juhtub
kui teie programm jookseb kokku.
See on päris vahva, eks?
GDB on vaba tarkvara, ja see töötab palju tuntud UNIX ja
Windows-põhiste operatsioonisüsteemidega, nii et see on väga levinud vahend.
>> Sa peaksid õppima armastama seda.
GDB plusse on palju lihtsam aega tabada vead
kui need, kes korralagedus kaudu kasutades arvailtaisiin
ja lõpmatu hulga Väljatrüki avaldustega.
GDB on käsurea tööriista, mis tähendab, et saate suhelda see terminal
väljastamise käske klaviatuuri abil asemel klõpsates nuppe hiirega.
>> Et alustada GDB, siis sõna otseses mõttes lihtsalt tüüp gdb käsureale ja vajuta enter.
Näete mõned read välja printida kuni ekraanile
näidates teile versioon GDB et näed,
selle autoriõiguse info, ja lõpus näete GDB kiire: (GDB).
See annab teile teada, et GDB on valmis käske.
Sel hetkel, kõige tähtsam on teada, kuidas seda teha on quit.
Õnneks on see üsna lihtne.
Quit käsk teeb just seda.
Kuna otsetee, võid lihtsalt kasutada q liiga.
Lõbus, kui käivitamist kuni GDB ja siis kohe suitsetamisest ei,
olgem nüüd rääkida kasutades GDB aidata siluda programm.
>> Et alustada, mul on programm siin factorial.c
et saab int ja üritab arvutada selle faktoriaali.
Kui sa ei ole näinud factorials enne või ei mäleta neid,
Faktoriaali arv n on võrdne toote n - (n - 1), (n - 2), ja nii edasi -
kuni vajutad 1.
Seetõttu faktoriaali 3 on 3 * 2 * 1 ehk 6,
ja faktoriaali 4 on 4 * 3 * 2 * 1 või 24.
Faktoriaali null on veider juhtum, see on 1,
ja factorials negatiivsete täisarvude ei ole määratletud.
Igatahes, midagi minu faktoriaali programmi on funky.
Kui ma käivitada, siis prindib välja imelik numbreid, mis on midagi pistmist factorials.
>> Niisiis, saame kasutada GDB aidata aru saada, mis toimub.
GDB tegutseb käivitatava faili,
mis on binaarfailidega toodetud koostamise protsessist.
See tähendab, et me ei saa joosta GDB meie. C või. H lähtekoodi faile nagu factorial.c.
Me tahame kasutada seda lihtsalt faktoriaal asemel.
Kui programm nõudnud käsurea argumendid,
see on koht, kus me tahaks täpsustada neid.
Sel juhul faktoriaal ei vaja käsurea argumendid,
nii me lihtsalt kirjuta run või r lühikeseks.
>> See algab faktoriaali programmi algust.
Kui programm peatub, ma toon oma GDB küsib tagasi.
Okei, proovime sama asja uuesti, faktoriaal 4.
Hea küll, me näeme, et me saada samasugune rämps siin GDB.
Nüüd, kui programm on lõppenud,
me ei saa minna sisse ja pääseda mistahes oma riigi,
nii me peame hakkama seda uuesti näitama enne kui saame näha, mis toimub.
Kuid peame mõtlema, kuidas vältida seda kuni see on keset oma perspektiivis.
>> Selleks, et me kasutame, mida nimetatakse murdepunkti.
Murdepunktid öelda GDB peatamiseks programmi teatud funktsiooni või lähtekoodi rida
et saaksime olukorra hindamisel programmi
väärtused muutujatele, riik mälu ja selline, selles punktis.
Kuna ma tõesti ei tea, kus asjad lähevad valesti,
>> Ma tahan alustada silumine õigus alguses,
õigus, kui peamine algab.
Me määrata murdepunkti alguses peamine kasutades pausi käsk.
Saame kasutada ka b lühendada vaheaega.
Nüüd alustame programm töötab jälle.
Siin me oleme alguses peamine, nagu GDB ütleb.
Rida koodi, mis on umbes täita, kuid ei ole veel
on printf rida.
Me ei saa öelda GDB täita seda rida koodi ja minna järgmisele reale
koos järgmise või n käsk.
>> Olgu, nüüd GDB ütleb meile, et me oleme GetInt rida.
Ma tean, et see tundub printf liin ei jooksnud
kuna me ei näe "Sisesta positiivne täisarv" välja printida ekraanil
kuid see reaalselt sõita.
Mida me näeme on operatsioonisüsteemi suruda kirjalikult midagi ekraanil
kuni see täiesti kindlasti, mis miks silumiseks väljatrükiga
Vahel võib tunduda ebausaldusväärne.
Igatahes, olgem taas minna järgmisele rida koodi ja sisestada int.
Jällegi, olgem tüüp 4.
Nii et see näeb imelik. Oleme real 12 vastavalt GDB,
aga järgmisel real, mis on umbes täita on lihtsalt lokkis traksidega.
>> See tähendab lihtsalt, et me lõpus silmus, meie teeme samas silmus tegelikult
ja GDB ütleb meile, et lõpetamise tingimus, nimelt ükski väiksem kui null,
täidab kõrval.
Kui see kunagi muutub veidi segadusse,
saame tõmba lähtekoodi GDB koos nimekirja või l käsk.
See prindib välja lähtekoodi
mis on koondunud rida, et me oleme praegu.
Kui me loendis või l jälle näeme järgmise komplekti read välja printida.
Me saame seda teha enne, kui oleme tabanud faili lõppu.
>> Et saada tagasi sinna, kus me olime, saame pakkumise nimekiri koos rea number,
sel juhul, rida 12.
Igatahes, liigume edasi.
Nüüd oleme 4 silmuse.
Teeme kindlaks, et meie arv muutuja sisaldab 4.
Me teeme seda printida või p, käsk.
Niisiis, GDB ütleb meile, et arv on tõepoolest ladustamiseks 4, kui lootsime.
1 $, et GDB prindib välja on eriline GDB muutuja
et on nüüd seatud salvestada number 4 ka.
Sa ei saa eirata seda nüüd, aga need GDB muutujad tulevad super mugav
rohkem arenenud juhtudel, kui soovite meenutada, mida olete teinud minevikus.
Igatahes, liigub edasi järgmise näeme, et hakkame liikuma läbi jaoks silmus.
Hoidkem läbimas siin n vähehaaval.
Mitte kirjutades n iga kord, saate ka lihtsalt Enter.
Kui oled tabanud siseneda ilma kirjutades midagi, GDB lihtsalt kordab eelmise käsu.
Nii et nüüd oleme tabanud printf kõne.
Tundub, et me oleme tõepoolest läbi käinud meie jaoks silmus 4 korda,
mis on see, mida me tahame teha, et korrutada 1, 2, 3, ja 4.
>> Kõik tundub nagu see toimib,
välja arvatud siis, kui me lüüa järgmisel jälle me seda väga palju, mitte 24.
Kui me välja printida väärtus faktoriaali kasutades p,
näeme, et faktoriaal ei ole see suur arv selles.
Midagi on kindlasti valesti.
Sel hetkel, kuigi oleme peaaegu lõpus programm,
ja kui on liiga hilja määrata midagi.
>> Kuid me saame uuesti programmi kirjutades r uuesti ja siis y kinnitada.
Nüüd oleme tagasi meie murdepunkti alguses peamine.
Me teame, et kõik tundub olevat trahvi lugemist n.
et saaksime hüpata n.
Alternatiivina saame uue murdepunkti pärast seda samas loop
ja hüpata seal. Teeme seda.
Paistab, rida 14 tuleb just pärast silmus.
Laseme murdepunkti seal.
See on hea tava, et määrata faili nimi selle murdepunkti käsk
alates GDB võite segaduses kui te töötate mitme failiga.
Edasi liikuda see murdepunkt, me kasutame jätkata või c käsk.
>> Okei, siin me oleme jaoks silmus.
Lähme veel 1 rida arvesse jaoks silmus,
ja siis hakkame trükkimine muutujad näha, mis toimub.
Teeme kindlaks, et ma tõepoolest 1 ootuspäraselt.
Jah, see on kõik hea.
Aga faktoriaal küll?
Vau, see pole hea.
Meil on suur negatiivne arv siin.
Kuidas see juhtus?
Noh, kui me vaatame tagasi kood,
me näeme, et me ei lähtestatud, nii et me oleme just prügikast seal.
See on kindlasti viskama meie arvutamisel.
>> Õnneks me ei pea lahkuma GDB määrata see.
Me saame initsialiseerida ta siinsamas ja määrata selle koodi hiljem kasutades trükkimiskäsku.
Me algväärtustamiseks 1 alates factorials nulli ja 1 on mõlemad 1
ja kui me initsialiseerida ta nulli, siis olime alati lõpuks null, kuna meie tulemus.
Võite seada mis tahes muutuja sel viisil, mis on super mugav.
Nüüd saab jätkata programmi.
Olgem veendumaks, et kõik on kui see peaks olema.
Num peaks olema 4, i peaks olema 1 ja faktoriaal peaks olema 1 liiga.
Me võime otsetee sellesse protsessi ja printida kõik meie kohalikud muutujad
koos super-kasulik käsk info kohalikega,
mis prindib välja kõik meie in-ulatus lokaalsed muutujad.
Igatahes, tundub, et kõik on hea minna.
>> Teeme teise minna ümber selle silmuse lihtsalt veenduda.
Okei, kõik tundub hea.
Nüüd saame kasutada jätkuvad käsu minna lõpuni.
Sweet! 4 faktoriaal välja printida 24 ootuspäraselt.
Nüüd saame minna seda parandada meie kood.
Selle asemel, et loobuda välja GDB, me kasutame teise terminali lingile teha.
Tulles tagasi meie GDB lingile, nüüd vaja kompileeri meie käivitatav.
Üks parimaid asju GDB on see, et sa ei pea lahkuma GDB joosta teha.
Nii et me ei pea lööb vana murdepunktid,
olgem keelata neid, sa arvasid, keelake käsk.
See keelab kõik meie murdepunktid.
Nüüd saame uuesti programmi r ja veenduge, et kõik on korras.
Paistab, kõik on hea minna.
Faktoriaal 4 trükib 24, nagu me arvasime.
GDB on üks kõige kasulikud vahendid sul oma tööriistakasti.
>> On ton rohkem asju saab teha koos GDB,
palju rohkem kui saate teha lihtne väljatrükke.
Järgmine kord, kui teie programm ei tee seda, mida soovite,
proovige GDB aru saada, mis toimub sees.
Mis natuke tava, on sul võimalik puurida ette õigus oma viga ei aja.
Minu nimi on Nate Hardison. See on CS50.