[Powered by Google Translate] GDB, GNU Mradi Debugger, ni nguvu debugging chombo kwa ajili ya C,
pamoja na lugha nyingine nyingi.
Ni inaruhusu wewe poke kuzunguka ndani ya mipango yako C wakati wao ni utekelezaji,
na pia inakupa fursa ya kuona nini hasa kinatokea
wakati mpango wako shambulio.
Ni pretty nifty, haki?
GDB ni programu za bure, na anaendesha katika UNIX wengi maarufu na
Makao Windows mifumo ya uendeshaji, hivyo ni chombo sana kuenea.
>> Unapaswa kujifunza kupenda.
GDB faida na muda mwingi rahisi kufuatilia chini mende
zaidi kuliko wale ambao chafuko njia ya kutumia guesses
na usio kiasi wa taarifa printout.
GDB ni chombo amri-line, ambayo ina maana unaweza kuingiliana na katika terminal
kutoa amri kupitia keyboard badala ya vifungo kubonyeza na mouse yako.
>> Kuanzisha GDB, wewe literally aina tu gdb katika haraka na hit kuingia.
Utaona mistari baadhi kuchapishwa kwa screen
kuonyesha toleo la GDB kwamba wewe ni mbio,
hati miliki yake ya habari, na mwishoni utaona haraka GDB: (gdb).
Hii inakuwezesha kujua kwamba GDB ni tayari kwa amri.
Katika hatua hii, jambo muhimu zaidi kujua jinsi ya kufanya ni kuacha.
Bahati nzuri, hii ni pretty rahisi.
amri kujiondoa anafanya tu.
Kama njia ya mkato, unaweza kutumia tu q pia.
Kama furaha kama booting up GDB na kisha mara moja kuacha ni,
hebu sasa kuzungumza kuhusu kutumia GDB kusaidia Debug mpango.
>> Kuanza, mimi nimepata mpango hapa katika factorial.c
kwamba anapata int na majaribio ya compute factorial wake.
Katika kesi hawajaona factorials kabla au sikumbuki yao,
factorial ya idadi n ni sawa na bidhaa ya n - (n - 1), (n - 2), na kadhalika -
mpaka hit 1.
Kwa hiyo, factorial ya 3 ni 3 * 2 * 1, au 6,
na factorial ya 4 ni 4 * 3 * 2 * 1, au 24.
factorial ya sifuri ni kesi ya isiyo ya kawaida, ni 1,
na factorials ya integers hasi si defined.
Anyway, kitu kuhusu mpango wangu factorial ni funky.
Wakati mimi kukimbia, ni Prints nje idadi weird kuwa na kitu cha kufanya na factorials.
>> Hivyo, tunaweza kutumia GDB kusaidia kufikiri nini kinaendelea.
GDB kazi kwenye files executable,
ambayo ni files binary zinazozalishwa na mchakato mkusanyiko.
Hiyo ni, hatuwezi kuendesha GDB juu ya c wetu. Au h chanzo code files kama factorial.c..
Tunataka kukimbia juu tu factorial badala yake.
Kama mpango required hoja amri yoyote-line,
hii ni mahali ambapo tunatarajia bayana kwao.
Katika kesi hiyo, factorial hauhitaji hoja amri yoyote-line,
hivyo sisi aina tu kukimbia au r kwa muda mfupi.
>> Hii itaanza factorial mpango mbio.
Wakati mpango ataacha mbio, mimi nitachukua GDB yangu kuchochea nyuma.
Okay, hebu jaribu kitu kimoja tena, factorial ya 4.
Haki zote, tunaona kwamba sisi ni kupata aina moja ya Junk hapa katika GDB.
Sasa kwamba mpango ina kumaliza,
hatuwezi kwenda katika na kupata yoyote ya hali yake,
hivyo tutaweza haja ya kuanza ni kukimbia tena kabla tunaweza kuona nini kinatokea.
Hata hivyo, tunahitaji njia ya kuacha ni wakati ni katikati ya kukimbia wake.
>> Ili kufanya hivyo, sisi kutumia kile kinachoitwa breakpoint.
Breakpoints kuwaambia GDB pause programu katika kazi fulani au chanzo line code
ili tuweze kuangalia hali ya mpango,
maadili ya vigezo, hali ya kumbukumbu na vile, katika hatua hiyo.
Tangu mimi si kweli kujua ambapo mambo yanaenda vibaya,
>> Mimi nataka tu kuanza debugging haki katika mwanzo sana,
haki wakati kuu huanza.
Tutaweza kuweka breakpoint katika mwanzo wa kuu kwa kutumia amri ya mapumziko.
Tunaweza pia kutumia b abbreviate mapumziko.
Sasa hebu kuanza mpango wa kukimbia tena.
Hapa sisi ni mwanzo wa kuu, kama GDB inatuambia.
mstari wa kanuni hiyo kuhusu kutekeleza lakini bado ana
ni mstari printf.
Tunaweza kuwaambia GDB kutekeleza huu mstari wa kanuni na kwenda mstari unaofuata
na amri ya pili au n.
>> Haki zote, sasa GDB inatuambia kwamba sisi ni juu ya mstari GetInt.
Mimi najua kwamba inaonekana kama mstari printf havijawa
tangu hatuoni "Ingieni chanya integer" magazeti nje kwenye screen,
lakini hakuwa kweli kukimbia.
Nini sisi ni kuona ni mfumo wa uendeshaji kukandamiza kuandika chochote kwa screen
mpaka kabisa ina, ambayo kwa nini debugging na nakala zake
wakati mwingine unaweza kuonekana uhakika.
Anyway, hebu tena kwenda line ya pili ya kificho na kuingia katika int.
Tena, hebu aina 4.
Hivyo hii inaonekana weird. Sisi ni juu ya mstari 12 kulingana na GDB,
lakini mstari unaofuata hiyo kuhusu kutekeleza ni tu Brace curly.
>> Hiyo ina maana sisi ni saa ya mwisho wa kitanzi, yetu kufanya wakati kitanzi kwa kweli,
na GDB anatuambia kwamba hali kusitishwa, yaani hakuna chini ya sifuri,
nitafanya ijayo.
Kama hii milele anapata utata kidogo,
tunaweza kuvuta chanzo code katika GDB na orodha au amri l.
Hii Prints nje chanzo code
hiyo ni unaozingatia kuzunguka mstari kwamba sisi ni sasa juu.
Kama sisi aina orodha au l tena, tutaweza kuona seti ya pili ya mistari magazeti nje.
Tunaweza kufanya hili mpaka sisi hit mwisho wa faili.
>> Ili kupata nyuma ambapo tulikuwa, tunaweza ugavi orodha na idadi ya mstari,
katika kesi hii, line 12.
Anyway, hebu kuendelea.
Sasa sisi ni juu ya kitanzi 4.
Hebu kuhakikisha kwamba num yetu ina variable 4.
Sisi kufanya pamoja na magazeti, au p, amri.
Hivyo, GDB inatuambia kwamba num ni kweli hifadhi 4, kama tulivyotarajia.
$ 1 GDB kwamba Prints nje ni maalum GDB variable
kwamba sasa ni kuweka na kuhifadhi 4 idadi kama vizuri.
Unaweza kupuuza hii kwa sasa, lakini vigezo GDB haya kuja katika Handy super
katika kesi zaidi ya juu wakati unataka kukumbuka nini umefanya kosa huko nyuma.
Anyway, kuhama kwa pili, tunaona kwamba sisi kuanza kusonga kupitia kwa kitanzi.
Hebu kuendelea kupitia hapa na kidogo n kidogo.
Badala ya kuandika n kila wakati, unaweza pia tu hit kuingia.
Wakati wewe hit kuingia bila kuandika chochote, GDB tu akarudisha amri uliopita.
Hivyo sasa tumekuwa hit wito printf.
Inaonekana kama tumekuwa kweli wamekwenda kupitia wetu kwa kitanzi mara 4,
ambayo ni nini tunataka kufanya ili kuzidisha kwa 1, 2, 3, na 4.
>> Kila kitu inaonekana kama ni kazi,
ila wakati sisi hit ijayo tena sisi kupata idadi hii kubwa badala ya 24.
Kama sisi magazeti nje thamani ya p factorial kutumia,
tunaona kwamba factorial gani kuwa hii idadi kubwa ndani yake.
Kitu ambacho dhahiri kwenda vibaya.
Katika hatua hii, ingawa, sisi ni karibu ya mwisho wa mpango,
na ni kuchelewa mno kurekebisha kitu chochote.
>> Hata hivyo, tunaweza kuanzisha upya mpango kwa kuandika r tena na kisha y kuthibitisha.
Sasa tuko nyuma katika breakpoint yetu katika mwanzo wa kuu.
Tunajua kwamba kila kitu inaonekana kuwa nzuri na kusoma katika n.
hivyo tunaweza kuruka mbele na n.
Vinginevyo, tunaweza kuweka breakpoint mpya baada ya kufanya wakati kitanzi
na kuruka huko. Hebu kufanya hivyo.
Inaonekana kama mstari 14 inakuja tu baada ya kitanzi.
Hebu kuweka breakpoint huko.
Ni vizuri mazoezi ya kubainisha jina faili katika amri hii breakpoint
tangu GDB wanaweza kupata kuchanganyikiwa kama wewe ni kufanya kazi na files nyingi.
Kusonga mbele ya breakpoint hii, tutaweza kutumia kuendelea au c amri.
>> Okay, hapa sisi ni wakati kwa kitanzi.
Hebu kwenda 1 zaidi katika mstari kwa kitanzi,
na kisha tutaweza kuanza vigezo uchapishaji kuona nini kinaendelea.
Hebu kuhakikisha kwamba i ni kweli 1, kama ilivyotarajiwa.
Yup, kwamba ni yote mema.
Je kuhusu factorial ingawa?
Ho, kwamba hakuna jema.
Sisi tumepewa kubwa hasi idadi hapa.
How'd kwamba kutokea?
Naam, kama sisi kuangalia nyuma katika kificho,
tunaona kwamba sisi kamwe initialized hivyo, hivyo tumekuwa tu got takataka katika huko.
Ambayo dhahiri kutupa mbali hesabu zetu.
>> Bahati nzuri, hatuna kuondoka GDB kurekebisha hii.
Tunaweza initialize ni haki hapa na kurekebisha katika code baadaye kwa kutumia amri ya kuchapisha.
Tutaweza initialize kwa 1 tangu factorials ya sifuri na 1 ni wawili 1,
na kama sisi initialize kwa sifuri, basi tunatarajia daima kuishia na sifuri kama matokeo yetu.
Unaweza kuweka yoyote kutofautiana kwa njia hii, ambayo ni super Handy.
Sasa, hebu kuendelea na mpango wetu.
Hebu kuhakikisha kila kitu ambapo ni walidhani kuwa.
Hes lazima 4, i lazima 1, na factorial lazima 1 pia.
Tunaweza mkato mchakato huu na magazeti yote ya vigezo yetu ya ndani
na super-kusaidia amri info wenyeji,
ambayo Prints nje wote wa-wigo katika vigezo yetu ya ndani.
Anyway, inaonekana kama kila kitu ni vizuri kwenda.
>> Hebu kufanya mwingine go-kuzunguka ya kitanzi tu kuhakikisha.
Sawa, kila kitu inaonekana kubwa.
Sasa tunaweza kuendelea kutumia amri ya kwenda hadi mwisho.
Tamu! 4 factorial kuchapishwa 24 kama ilivyotarajiwa.
Sasa tunaweza kwenda kurekebisha hii katika code yetu.
Badala ya kujiondoa kutoka GDB, tutaweza kutumia mwingine tab terminal kufanya hili.
Tukirudi kwenye GDB tab yetu, sisi sasa haja ya recompile executable yetu.
Moja ya mambo bora kuhusu GDB ni kwamba huna haja ya kuondoka GDB kuendesha kufanya.
Hivyo kwamba hatuwezi kuendelea kupiga breakpoints zamani,
hebu kuzilemaza na, wewe guessed it, afya amri.
Hii italemaza wote wa breakpoints yetu.
Sasa, tunaweza kuanzisha upya mpango na r na kuhakikisha kila kitu ni sawa.
Inaonekana kama kila kitu ni vizuri kwenda.
Factorial ya prints 4 nje 24, tu kama sisi mawazo.
GDB ni moja ya zana na manufaa zaidi nimepata katika Vifaa yako.
>> Kuna tani zaidi ya mambo unaweza kufanya na GDB,
mbali zaidi kuliko unaweza kufanya na nakala zake rahisi.
Next wakati mpango wako si kufanya nini ungependa,
kujaribu kukimbia GDB kufikiri nini kinaendelea ndani.
Na kidogo ya mazoezi, wewe utakuwa na uwezo wa kuchimba chini kulia juu ya mdudu wako katika wakati hakuna.
Jina langu ni Nate Hardison. Hii ni CS50.