[Powered by Google Translate] GDB, y Prosiect GNU Bar, yn offeryn pwerus ar gyfer debugging C, ynghyd â llawer o ieithoedd eraill. Mae'n caniatáu i chi chwilota o amgylch y tu mewn i'ch rhaglenni C tra eu bod yn gweithredu, ac mae hefyd yn rhoi cyfle i chi weld yn union beth sy'n digwydd pan fydd eich ddamweiniau rhaglen. Mae'n eithaf nifty, dde? GDB yn feddalwedd rhad ac am ddim, ac mae'n rhedeg ar poblogaidd UNIX a Systemau gweithredu Windows-seiliedig, felly mae'n arf hynod o eang. Dylech ddysgu i garu ef. Manteision GDB yn cael llawer o amser yn haws dod o hyd i chwilod na'r rhai sy'n brwydro drwy ddefnyddio ddyfalu a symiau diddiwedd o ddatganiadau allbrint. GDB yn arf gorchymyn-lein, sy'n golygu y gallwch ryngweithio â hi mewn terfynell cyhoeddi gorchmynion trwy'r bysellfwrdd yn hytrach na botymau glicio gyda'ch llygoden. I gychwyn GDB, yn llythrennol dim ond gdb fath yn y brydlon a daro chofnoda. Byddwch yn gweld rhai llinellau hargraffu i'r sgrin dangos i chi y fersiwn o'r GDB eich bod yn rhedeg, ei wybodaeth hawlfraint, ac ar y diwedd byddwch yn gweld y prydlon GDB: (gdb). Mae hyn yn gadael i chi wybod bod GDB yn barod ar gyfer gorchmynion. Ar y pwynt hwn, y peth mwyaf pwysig i wybod sut i wneud yn rhoi'r gorau iddi. Yn ffodus, mae hyn yn eithaf syml. Y gorchymyn roi'r gorau iddi yn gwneud hynny. Fel shortcut, gallwch ddefnyddio q hefyd. Fel hwyl wrth llesáu i fyny GDB ac yna yn brydlon roi'r gorau iddi yw, gadewch i ni yn awr yn siarad am ddefnyddio GDB i helpu i debug rhaglen. I ddechrau, mae gen i raglen yma yn factorial.c sy'n cael yn int ac yn ceisio i gyfrifo ei ffactoraidd. Rhag ofn nad ydych wedi gweld factorials cyn neu nid ydynt yn cofio nhw, Mae ffactoraidd o'r nifer n yn hafal i luoswm n - (n - 1), (n - 2), ac yn y blaen - nes i chi daro 1. Felly, mae'r ffactor o 3 yn 3 * 2 * 1, neu 6, a ffactor o 4 yw 4 * 3 * 2 * 1, neu 24. Mae'r ffactor o sero yn achos rhyfedd, mae'n 1, ac nid y factorials o gyfanrifau negatif yn cael eu diffinio. Anyway, rhywbeth am fy rhaglen ffactor yn ffynci. Pan fyddaf yn rhedeg, bydd yn argraffu rhifau rhyfedd sydd ddim i'w wneud â factorials. Felly, gallwn ddefnyddio GDB i helpu i chyfrif i maes beth sy'n mynd ymlaen. GDB yn gweithredu ar ffeiliau gweithredadwy, sydd yn y ffeiliau deuaidd a gynhyrchir gan y broses casglu. Hynny yw, ni allwn redeg GDB ar ein. C neu. H ffeiliau cod ffynhonnell fel factorial.c. Rydym yn awyddus i redeg ar ddim ond ffactoraidd yn lle hynny. Os bydd y rhaglen angen unrhyw ddadleuon gorchymyn-lein, dyma lle byddem yn nodi iddynt. Yn yr achos hwn, nid ffactoraidd oes angen unrhyw ddadleuon gorchymyn-lein, felly rydym yn jyst deipio redeg neu r yn fyr. Bydd hyn yn dechrau rhedeg rhaglen ffactoraidd. Pan fydd y rhaglen yn stopio rhedeg, byddaf yn cael fy GDB brydlon yn ôl. Iawn, gadewch i ni geisio yr un peth eto, ffactor o 4. Mae pob hawl, rydym yn gweld ein bod yn cael yr un math o sothach yma yn GDB. Nawr bod y rhaglen wedi dod i ben, Ni allwn fynd i mewn a chael gweld unrhyw un o'i gyflwr, felly bydd angen i ni ddechrau yn rhedeg eto cyn y gallwn weld beth sy'n digwydd. Fodd bynnag, mae arnom angen ffordd i'w atal tra ei fod yn yng nghanol ei rhedeg. I wneud hynny, rydym yn defnyddio hyn a elwir yn torbwynt. Breakpoints dweud GDB i oedi y rhaglen ar swyddogaeth benodol neu linell cod ffynhonnell fel y gallwn edrych ar gyflwr y rhaglen, gwerthoedd y newidynnau, cyflwr y cof ac o'r fath, ar yr adeg honno. Gan nad wyf yn wir yn gwybod ble mae pethau yn mynd o'i le, Fi jyst eisiau dechrau debugging i'r dde ar y dechrau, iawn pan prif dechrau. Byddwn yn gosod torbwynt ar ddechrau'r prif ddefnyddio'r gorchymyn egwyl. Gallwn hefyd ddefnyddio b talfyrru egwyl. Nawr gadewch i ni ddechrau y rhaglen yn rhedeg eto. Dyma ni ar ddechrau prif, yn union fel GDB yn dweud wrthym. Mae'r llinell o god sy'n ar fin gweithredu ond nid yw eto yn y llinell printf. Gallwn ddweud GDB i weithredu y llinell hon o god a mynd i'r llinell nesaf gyda'r gorchymyn nesaf neu n. Mae pob hawl, yn awr GDB yn dweud wrthym ein bod ni'n ar y llinell GetInt. Rwy'n gwybod ei bod yn ymddangos fel nad oedd y llinell printf oedd yn rhedeg gan nad ydym yn gweld "Rhowch cyfanrif positif" print allan ar y sgrin, ond yn rhedeg mewn gwirionedd. Yr hyn yr ydym ni'n ei weld yw system weithredu atal unrhyw beth ysgrifennu i'r sgrin nes ei fod yn gwbl rhaid iddo, a pam debugging gyda allbrintiau Weithiau, gall ymddangos yn annibynadwy. Beth bynnag, gadewch i ni unwaith eto yn mynd i'r llinell nesaf o god a nodi'r mewn int. Unwaith eto, gadewch i ni math 4. Felly, mae hyn yn edrych yn rhyfedd. Rydym ar ôl llinell 12 i GDB, ond y llinell nesaf sydd ar fin gweithredu yn unig yw Brace cyrliog. Mai dim ond yn golygu ein bod ar ddiwedd y dolen, mae ein wneud tra dolen mewn gwirionedd, a GDB yn dweud wrthym fod y cyflwr derfynu, sef dim llai na sero, Bydd gweithredu nesaf. Os yw hyn byth yn cael ychydig yn ddryslyd, gallwn dynnu i fyny y cod ffynhonnell yn GDB â'r rhestr neu orchymyn l. Mae hyn yn argraffu y cod ffynhonnell sydd wedi canolbwyntio ar y trywydd yr ydym ni'n ar hyn o bryd. Os ydym yn teipio rhestr neu l eto, byddwn yn gweld y set nesaf o linellau argraffu. Gallwn wneud hyn nes i ni gyrraedd at ddiwedd y ffeil. I fynd yn ôl i'r lle oeddem, gallwn ddarparu rhestr gyda nifer llinell, yn yr achos hwn, llinell 12. Beth bynnag, gadewch i ni symud ymlaen. Nawr ein bod ar y ddolen 4. Gadewch i ni sicrhau bod ein amrywiol NUM yn cynnwys 4. Rydym yn gwneud hyn gyda'r print, neu p, gorchymyn. Felly, GDB yn dweud wrthym fod NUM yn wir yn storio 4, wrth i ni ddisgwyl. Y $ 1 sy'n GDB yn argraffu yn newidyn GDB arbennig sy'n cael ei nodi bellach i storio'r rhif 4 yn ogystal. Gallwch anwybyddu hyn am y tro, ond mae'r rhain newidynnau GDB yn dod i mewn super 'n hylaw mewn achosion mwy datblygedig pan fyddwch eisiau cofio beth rydych wedi ei wneud yn y gorffennol. Anyway, gan symud ymlaen gyda nesaf, rydym yn gweld ein bod yn dechrau symud drwy'r gyfer ddolen. Gadewch i ni gadw i fynd drwy'r yma gyda n bob yn dipyn. Yn hytrach na teipio n bob tro, gallwch hefyd jyst daro chofnoda. Pan fyddwch yn daro chofnoda heb teipio unrhyw beth, dim ond GDB yn ailadrodd y gorchymyn blaenorol. Felly, nawr rydym wedi taro yr alwad printf. Mae'n edrych fel ein bod wedi mynd yn wir trwy ein dolen i 4 gwaith, sef yr hyn yr ydym am ei wneud er mwyn lluosi â 1, 2, 3, a 4. Mae popeth yn ymddangos fel ei fod yn gweithio, ac eithrio pan fyddwn yn taro nesaf eto, rydym yn cael y nifer enfawr yn hytrach na 24. Os byddwn yn argraffu gwerth p gan ddefnyddio ffactoraidd, rydym yn gweld bod ffactor oes gan y nifer enfawr ynddo. Rhywbeth sy'n bendant yn mynd o'i le. Ar y pwynt hwn, fodd bynnag, yr ydym bron ar ddiwedd y rhaglen, ac mae'n rhy hwyr i drwsio unrhyw beth. Fodd bynnag, gallwn ailgychwyn y rhaglen trwy deipio r eto ac yna y i gadarnhau. Nawr rydym ni'n ôl ar ein torbwynt ar ddechrau o brif bibellau. Rydym yn gwybod bod popeth yn ymddangos i fod yn iawn gyda darllen yn y n. fel y gallwn neidio ymlaen â n. Fel arall, gallwn osod torbwynt newydd ar ôl y ddolen wneud tra a neidio yno. Gadewch i ni wneud hynny. Edrych fel llinell 14 yn union ar ôl y ddolen. Gadewch i ni osod torbwynt yno. Mae'n arfer da i nodi enw'r ffeil i mewn hon archa torbwynt gan y gall GDB drysu os ydych chi'n gweithio gyda ffeiliau lluosog. Er mwyn symud ymlaen o hyn torbwynt, byddwn yn defnyddio'r parhewch neu c gorchymyn. Iawn, dyma ni yn y ddolen i. Gadewch i ni fynd llinell 1 yn fwy i mewn i'r ddolen ar gyfer, ac yna byddwn yn dechrau newidynnau argraffu i weld beth sy'n mynd ymlaen. Gadewch i ni wneud yn siwr bod fi yn wir 1, yn ôl y disgwyl. Yup, dyna i gyd yn dda. Beth am ffactoraidd er bod? Pwy yw, mae hynny'n dda i ddim. Rydym wedi cael nifer negyddol mawr yma. How'd sy'n digwydd? Wel, os ydym yn edrych yn ôl ar y cod, gwelwn nad ydym byth yn ymgychwyn ei, felly rydym wedi cael dim ond sbwriel i mewn 'na. Bydd hynny yn bendant yn taflu oddi ar ein cyfrifiad. Yn ffodus, nid oes rhaid i ni adael GDB at atgyweiria hon. Gallwn ymgychwyn yn iawn yma ac atgyweiria 'yn y cod yn ddiweddarach gan ddefnyddio'r gorchymyn print. Byddwn yn ymgychwyn i 1 ers y factorials o sero ac 1 yn y ddau 1, ac os ydym yn ymgychwyn i sero, yna byddem bob amser yn gorffen i fyny gyda sero fel ein canlyniad. Gallwch osod unrhyw newidyn y ffordd hon, sydd yn super 'n hylaw. Nawr, gadewch i ni barhau â'n rhaglen. Gadewch i ni wneud yn siwr fod popeth yn lle mae'n 'n dybiedig i fod. Dylai fod yn Num 4, dylai fod 1 i, a dylai fod yn ffactor 1 yn rhy. Gallwn llwybr byr y broses hon ac argraffu ein holl newidynnau lleol gyda'r super-gymorth bobl leol gorchymyn gwybodaeth, sy'n argraffu allan ein holl mewn-sgôp newidynnau lleol. Beth bynnag, mae'n edrych fel popeth yn dda i fynd. Gadewch i ni wneud un arall go-o gwmpas y ddolen yn unig i wneud yn siŵr. Iawn, mae popeth yn edrych yn wych. Nawr gallwn ddefnyddio'r gorchymyn parhewch i fynd i'r diwedd. Sweet! 4 ffactoraidd argraffu 24 fel y disgwylir. Nawr gallwn fynd atgyweiria hon yn ein cod. Yn hytrach na rhoi'r gorau iddi allan o GDB, byddwn yn defnyddio terfynell tab arall i wneud hyn. Fynd yn ôl at ein tab GDB, mae angen i ni ail-grynhoi ein gweithredadwy. Un o'r pethau gorau am GDB yw nad oes angen i chi adael GDB i redeg eu gwneud. Felly, nad ydym yn cadw taro y breakpoints hen, gadewch i analluoga 'iddynt y, i chi ei guessed, analluoga gorchymyn. Bydd hyn yn atal ein holl breakpoints. Yn awr, gallwn ailgychwyn y rhaglen gyda r ac yn gwneud yn siwr fod popeth yn iawn. Edrych fel popeth yn dda i fynd. Ffactor o 4 brintiau allan 24, yn union fel i ni feddwl. GDB yn un o'r arfau mwyaf defnyddiol sydd gennych yn eich blwch offer. Mae yna bethau tunnell arall y gallwch ei wneud gyda GDB, llawer mwy nag y gallwch ei wneud gyda allbrintiau syml. Y tro nesaf nad yw eich rhaglen yn ei wneud beth hoffech chi, ceisio rhedeg GDB at chyfrif i maes beth sy'n mynd ymlaen y tu mewn. Gydag ychydig o ymarfer, byddwch yn gallu i ddrilio i lawr i'r dde ar eich bug mewn dim o amser. Fy enw i yw Nate Hardison. Mae hyn yn CS50.