[Powered by Google Translate] GDB, GNU Debugger projekta, je močan debugging orodje za C
skupaj s številnimi drugimi jeziki.
To vam omogoča, da suniti okrog znotraj svojih programov C, medtem ko oni izvršujejo
prav tako pa vam daje priložnost, da vidijo, kaj se dogaja
ko se program sesuje.
To je zelo eleganten, kajne?
GDB je brezplačna programska oprema, in ga zažene na številnih priljubljenih UNIX in
Operacijski sistem Windows operacijskih sistemih, tako da je zelo razširjena orodje.
>> Če bi izvedeli, da ga ljubim.
GDB profesionalci imajo veliko laže izslediti napake
kot tisti, ki zmešnjave s pomočjo ugibanja
in neskončne količine izpisov izkazov.
GDB je orodje ukazne vrstice, kar pomeni, da lahko delajo z njim v terminalu
ukazov preko tipkovnice, namesto da kliknete gumbe z miško.
>> Za zagon GDB, dobesedno samo tip gdb na poziv in pritisnite tipko Enter.
Videli boste nekaj vrstic izpisal na zaslon
prikazuje različico gdb, da ste tekmovanje v teku,
svoje informacije o avtorskih pravicah, in na koncu boste videli GDB poziv: (gdb).
To vam pove, da je pripravljena za GDB ukazov.
Na tej točki, je nehal najbolj pomembna stvar, da vem, kako to storiti.
Na srečo, to je zelo preprosta.
Opustitvi kajenja ukaz ne samo to.
Kot bližnjice lahko preprosto uporabite q preveč.
Kot je zabavno, kot škorenj ki gre gor GDB in nato takoj odnehal je,
kaj je zdaj govoriti o uporabi GDB pomaga debug program.
>> Za začetek, imam program, tukaj v factorial.c
da dobi int in poskuša izračunati svojo fakulteto.
V primeru, da še niste videli factorials pred ali jih ne spomnim,
Fakulteto števila n je enaka zmnožku n - (n - 1), (n - 2), in tako naprej -
dokler ne dosežete 1.
Zato fakulteto 3 je 3 * 2 * 1 ali 6,
in fakulteto 4 je 4 * 3 * 2 * 1, ali 24.
Fakulteto je nič čudno, tako, da je 1,
in se factorials negativnih števil ni opredeljen.
Kakorkoli že, nekaj o moji faktorski programa je funky.
Ko sem teči, se natisne čudne številke, ki nimajo nič skupnega z factorials.
>> Torej, lahko uporabite GDB pomaga ugotoviti, kaj se dogaja.
GDB deluje na izvedljivih datotek,
ki so binarne datoteke, ki jih je urejanje procesa.
To pomeni, da ne moremo teči GDB na naši. C oz. H datoteke izvorne kode, kot factorial.c.
Želimo, da bi sistem deloval na samo fakulteto namesto tega.
Če program zahteva nobenih ukazni vrstici nekaj argumentov,
to je, če bi se jih določi.
V tem primeru fakulteta ne zahteva nobenih ukazni vrstici nekaj argumentov,
tako da smo šele stavek tek ali r na kratko.
>> To se bo začelo fakulteto delovanje programa.
Ko se program ne deluje, bom moj GDB poziv nazaj.
Prav, poskusimo še enkrat isto stvar, Fakulteta 4.
V redu, vidimo, da smo dobili enake smeti tukaj v gdb.
Zdaj, ko se je program končal,
ne moremo iti in dostop do katerega koli od svoje države,
tako da bomo morali začeti znova teče, preden bomo lahko videli, kaj se dogaja.
Vendar pa moramo način, kako ga ustaviti, medtem ko je v sredini svojega rok.
>> Da bi to dosegli, bomo uporabili, kar se imenuje prekinitveno točko.
Mejne vrednosti povedal GDB, da prekinete program na določene funkcije ali liniji izvorne kode
tako da lahko proučujemo stanje programa,
vrednosti spremenljivk, stanje pomnilnika in tako, na tej točki.
Ker res ne vem, kje gredo stvari narobe,
>> Hočem, da začnete iskanje in odpravljanje napak prav na samem začetku,
prav, ko se začne glavna.
Bomo nastavite prekinitveno točko na začetku glavni odmor z uporabo ukaza.
Mi lahko uporabite tudi b Skrajšati odmor.
Zdaj pa začnimo program teče znova.
Tukaj smo na začetku glavni, tako kot GDB pove.
Linija kode, ki je tik pred izvedbo, vendar še ni
je printf line.
Mi lahko poveste gdb za izvajanje te kode in pojdite na naslednjo vrstico
z naslednjo ali n ukaz.
>> V redu, zdaj GDB nam pove, da smo na liniji GetInt.
Vem, da se zdi, kot printf linija ni tekla
saj ne vidimo "Vnesite pozitivno celo število" print out na zaslonu,
vendar se je to dejansko deluje.
Kaj smo videli, je operacijski sistem zatiranje pisanje ničesar na zaslonu
dokler ni absolutno je, kar zakaj debugging z izpisi
Včasih se zdi nezanesljiva.
Kakorkoli že, dajmo še enkrat šel v naslednjo vrstico kode in vstopiti v notr.
Še enkrat, kaj je tip 4.
Tako to izgleda čudno. Mi smo na liniji 12 v skladu z gdb,
toda naslednja vrstica, ki je približno za izvršitev le kodrasti brace.
>> To samo pomeni, da smo na koncu zanke, naša storiti, medtem ko zanke v resnici,
GDB in nam pravi, da je odpoved pogoj, in sicer kljub manjši od nič,
bodo izvajale naslednji.
Če se to kdaj postane malo zmedeno,
lahko potegnite do izvorne kode v gdb s seznama ali l ukaz.
To natisne izvorno kodo
, ki je osredotočeno na progi, da smo trenutno.
Če vpišemo seznam ali litrov enkrat, bomo videli naslednji nabor vrstic natisniti.
To lahko storimo tako, dokler ne bomo zadeli konec datoteke.
>> Da bi dobili nazaj, kjer smo bili, smo lahko dobavi seznama s številko vrstice,
v tem primeru postavka 12.
Kakorkoli že, gremo naprej.
Zdaj smo na 4 zanke.
Naj se prepričajte, da je naša spremenljivka vsebuje 4 cilindrov.
To počnemo s tiskanim ali p, ukaz.
Torej, GDB nam pove, da je res cilindrov shranjevanje 4, kot smo pričakovali.
Na $ 1, da GDB natisne, je posebna spremenljivka GDB
, ki je nastavljen za shranjevanje številka 4, kot tudi.
Lahko prezreti to za zdaj, vendar so te spremenljivke GDB prišel prav super
v bolj napredovalih primerih, ko želite, da se spomni, kaj si storil v preteklosti.
Kakorkoli že, gremo naprej z drugo, vidimo, da smo začeli gibljejo skozi zanke for.
Nadaljujmo z tukaj z n bitov za korakom.
Namesto tipkanja n vsakokrat, lahko tudi samo zadeti nastopiti.
Ko zadeti nastopiti brez tipkanja ničesar, GDB samo ponavlja prejšnji ukaz.
Torej, zdaj smo zadeli printf klic.
Izgleda, da smo dejansko šli skozi naše zanka 4-krat,
, ki je tisto, kar želimo narediti, da bi se pomnoži z 1, 2, 3 in 4.
>> Vse, kar se zdi, kot da deluje,
razen če naletimo na naslednji spet smo dobili to ogromno število namesto 24.
Če želimo izpisati vrednost faktorski z p,
vidimo, da fakulteta ne da je to veliko več v njej.
Nekaj ​​je definitivno narobe.
Na tej točki, čeprav smo skoraj na koncu programa,
in da je prepozno, da ničesar popraviti.
>> Vendar pa lahko ponovno zagnati programa z vnosom r še enkrat in potem y za potrditev.
Zdaj smo spet na naši mejnimi vrednostmi na začetku glavni.
Vemo, da je vse, kar se zdi v redu z branjem v n.
tako da bomo lahko preskočite s n.
Lahko pa smo postavili novo odmerka po, medtem ko je zanka
in skok tam. Naredimo to.
Izgleda, vrstica 14 pride samo po zanki.
Naj nastavite prekinitveno točko tam.
To je dobra praksa, da določite ime datoteke v tem ukazu prelomne točke
saj se GDB zmeden, če delate z več datotekami.
Če želite premakniti naprej to mejnimi vrednostmi, bomo uporabili continue ali C ukaz.
>> No, pa smo na za zanko.
Pojdimo 1 več za linijo v zanki,
in potem bomo začeli tiskanje spremenljivk, da vidim, kaj se dogaja.
Naj se prepričajte, da sem res 1, kot je bilo pričakovano.
Ja, to je vse v redu.
Kaj pa fakulteto, čeprav?
Vau, to pa ni dobro.
Imamo veliko negativno število tukaj.
Kako se je to zgodilo?
No, če pogledamo nazaj na kodo,
vidimo, da nismo nikoli začeto, tako da smo pravkar smeti tam.
To bo zagotovo vrgel svoj izračun.
>> Na srečo nimamo zapustiti GDB popraviti to.
Mi lahko zažene tukaj in jo pritrdite v kodeksu kasneje s pomočjo ukaza za tiskanje.
Mi bomo za inicializacijo 1, saj so factorials iz nič in 1 sta 1,
in če jo inicializirati na nič, potem pa smo vedno na koncu z nič, kot je naš rezultat.
Nastavite lahko vse spremenljivke na ta način, ki je zelo priročen.
Zdaj pa še naš program.
Naj bo vse je tam, kjer je moral biti.
Št mora biti 4, bi moral biti 1 in fakulteto mora biti 1 preveč.
Mi lahko bližnjico ta proces in tiskanje vseh naših lokalnih spremenljivk
z izjemno koristne domačini info ukaz,
ki natisne vse naše in-področje lokalnih spremenljivk.
Kakorkoli že, izgleda, da je vse v redu, da gredo.
>> Naredimo še en neuspeli prilet z zanko samo prepričati.
Ok, vse izgleda super.
Sedaj lahko uporabite še naprej ukaz, da gredo do konca.
Sweet! 4 fakulteto natisne 24 kot je bilo pričakovano.
Zdaj gremo lahko to popravimo v naši kodi.
Namesto da bi nehal iz gdb, bomo uporabili drug terminal kartico za to.
Če se vrnemo k GDB kartici moramo zdaj prevedem našo izvedljivo.
Ena izmed najboljših stvari približno gdb je, da vam ni treba zapustiti GDB teči narediti.
Tako, da ne vodijo hitting stare prelomnih točk,
dajmo jim onemogočiti z, uganili ste, onemogočiti ukaz.
S tem boste onemogočili vse naše prelomnih točk.
Sedaj lahko ponovno program z r in da bo vse v redu.
Izgleda, da je vse v redu, da gredo.
Fakulteta 4 natisne 24, tako kot smo si mislili.
GDB je eden izmed najbolj koristnih orodij, ki ste jih dobili v vašem orodjarni.
>> Obstajajo ton več stvari, ki jih lahko storite z gdb,
veliko več, kot lahko to storite s preprostimi izpisov.
Naslednjič, ko se program ne to, kar želite,
poskusite zagnati GDB, da ugotovimo, kaj se dogaja v notranjosti.
Z malo vaje boste mogli vrtanje navzdol na vašem bug v nobenem trenutku.
Moje ime je Nate Hardison. To je CS50.