1 00:00:07,170 --> 00:00:12,630 [Powered by Google Translate] GDB, GNU Mradi Debugger, ni nguvu debugging chombo kwa ajili ya C, 2 00:00:12,630 --> 00:00:14,300 pamoja na lugha nyingine nyingi. 3 00:00:14,300 --> 00:00:17,440 Ni inaruhusu wewe poke kuzunguka ndani ya mipango yako C wakati wao ni utekelezaji, 4 00:00:17,440 --> 00:00:20,880 na pia inakupa fursa ya kuona nini hasa kinatokea 5 00:00:20,880 --> 00:00:22,490 wakati mpango wako shambulio. 6 00:00:22,490 --> 00:00:24,690 Ni pretty nifty, haki? 7 00:00:24,690 --> 00:00:27,980 GDB ni programu za bure, na anaendesha katika UNIX wengi maarufu na 8 00:00:27,980 --> 00:00:31,840 Makao Windows mifumo ya uendeshaji, hivyo ni chombo sana kuenea. 9 00:00:31,840 --> 00:00:33,560 >> Unapaswa kujifunza kupenda. 10 00:00:33,560 --> 00:00:36,800 GDB faida na muda mwingi rahisi kufuatilia chini mende 11 00:00:36,800 --> 00:00:39,150 zaidi kuliko wale ambao chafuko njia ya kutumia guesses 12 00:00:39,150 --> 00:00:41,420 na usio kiasi wa taarifa printout. 13 00:00:41,420 --> 00:00:45,810 GDB ni chombo amri-line, ambayo ina maana unaweza kuingiliana na katika terminal 14 00:00:45,810 --> 00:00:49,720 kutoa amri kupitia keyboard badala ya vifungo kubonyeza na mouse yako. 15 00:00:49,720 --> 00:00:54,960 >> Kuanzisha GDB, wewe literally aina tu gdb katika haraka na hit kuingia. 16 00:00:54,960 --> 00:00:58,230 Utaona mistari baadhi kuchapishwa kwa screen 17 00:00:58,230 --> 00:01:00,810 kuonyesha toleo la GDB kwamba wewe ni mbio, 18 00:01:00,810 --> 00:01:07,890 hati miliki yake ya habari, na mwishoni utaona haraka GDB: (gdb). 19 00:01:07,890 --> 00:01:10,770 Hii inakuwezesha kujua kwamba GDB ni tayari kwa amri. 20 00:01:10,770 --> 00:01:15,400 Katika hatua hii, jambo muhimu zaidi kujua jinsi ya kufanya ni kuacha. 21 00:01:15,400 --> 00:01:17,790 Bahati nzuri, hii ni pretty rahisi. 22 00:01:17,790 --> 00:01:19,840 amri kujiondoa anafanya tu. 23 00:01:19,840 --> 00:01:23,090 Kama njia ya mkato, unaweza kutumia tu q pia. 24 00:01:23,090 --> 00:01:27,410 Kama furaha kama booting up GDB na kisha mara moja kuacha ni, 25 00:01:27,410 --> 00:01:30,800 hebu sasa kuzungumza kuhusu kutumia GDB kusaidia Debug mpango. 26 00:01:30,800 --> 00:01:34,630 >> Kuanza, mimi nimepata mpango hapa katika factorial.c 27 00:01:34,630 --> 00:01:37,380 kwamba anapata int na majaribio ya compute factorial wake. 28 00:01:37,380 --> 00:01:41,270 Katika kesi hawajaona factorials kabla au sikumbuki yao, 29 00:01:41,270 --> 00:01:47,840 factorial ya idadi n ni sawa na bidhaa ya n - (n - 1), (n - 2), na kadhalika - 30 00:01:47,840 --> 00:01:49,230 mpaka hit 1. 31 00:01:49,230 --> 00:01:54,550 Kwa hiyo, factorial ya 3 ni 3 * 2 * 1, au 6, 32 00:01:54,550 --> 00:02:00,180 na factorial ya 4 ni 4 * 3 * 2 * 1, au 24. 33 00:02:00,180 --> 00:02:03,970 factorial ya sifuri ni kesi ya isiyo ya kawaida, ni 1, 34 00:02:03,970 --> 00:02:06,970 na factorials ya integers hasi si defined. 35 00:02:06,970 --> 00:02:10,280 Anyway, kitu kuhusu mpango wangu factorial ni funky. 36 00:02:10,280 --> 00:02:15,410 Wakati mimi kukimbia, ni Prints nje idadi weird kuwa na kitu cha kufanya na factorials. 37 00:02:15,410 --> 00:02:19,030 >> Hivyo, tunaweza kutumia GDB kusaidia kufikiri nini kinaendelea. 38 00:02:19,030 --> 00:02:21,720 GDB kazi kwenye files executable, 39 00:02:21,720 --> 00:02:24,910 ambayo ni files binary zinazozalishwa na mchakato mkusanyiko. 40 00:02:24,910 --> 00:02:30,940 Hiyo ni, hatuwezi kuendesha GDB juu ya c wetu. Au h chanzo code files kama factorial.c.. 41 00:02:30,940 --> 00:02:34,650 Tunataka kukimbia juu tu factorial badala yake. 42 00:02:34,650 --> 00:02:38,340 Kama mpango required hoja amri yoyote-line, 43 00:02:38,340 --> 00:02:40,230 hii ni mahali ambapo tunatarajia bayana kwao. 44 00:02:40,230 --> 00:02:44,050 Katika kesi hiyo, factorial hauhitaji hoja amri yoyote-line, 45 00:02:44,050 --> 00:02:46,410 hivyo sisi aina tu kukimbia au r kwa muda mfupi. 46 00:02:46,410 --> 00:02:50,440 >> Hii itaanza factorial mpango mbio. 47 00:02:50,440 --> 00:02:53,940 Wakati mpango ataacha mbio, mimi nitachukua GDB yangu kuchochea nyuma. 48 00:02:53,940 --> 00:02:58,130 Okay, hebu jaribu kitu kimoja tena, factorial ya 4. 49 00:02:58,130 --> 00:03:02,910 Haki zote, tunaona kwamba sisi ni kupata aina moja ya Junk hapa katika GDB. 50 00:03:02,910 --> 00:03:04,850 Sasa kwamba mpango ina kumaliza, 51 00:03:04,850 --> 00:03:06,870 hatuwezi kwenda katika na kupata yoyote ya hali yake, 52 00:03:06,870 --> 00:03:09,870 hivyo tutaweza haja ya kuanza ni kukimbia tena kabla tunaweza kuona nini kinatokea. 53 00:03:09,870 --> 00:03:13,570 Hata hivyo, tunahitaji njia ya kuacha ni wakati ni katikati ya kukimbia wake. 54 00:03:13,570 --> 00:03:16,970 >> Ili kufanya hivyo, sisi kutumia kile kinachoitwa breakpoint. 55 00:03:16,970 --> 00:03:21,880 Breakpoints kuwaambia GDB pause programu katika kazi fulani au chanzo line code 56 00:03:21,880 --> 00:03:24,070 ili tuweze kuangalia hali ya mpango, 57 00:03:24,070 --> 00:03:27,380 maadili ya vigezo, hali ya kumbukumbu na vile, katika hatua hiyo. 58 00:03:27,380 --> 00:03:30,750 Tangu mimi si kweli kujua ambapo mambo yanaenda vibaya, 59 00:03:30,750 --> 00:03:33,510 >> Mimi nataka tu kuanza debugging haki katika mwanzo sana, 60 00:03:33,510 --> 00:03:36,510 haki wakati kuu huanza. 61 00:03:36,510 --> 00:03:39,260 Tutaweza kuweka breakpoint katika mwanzo wa kuu kwa kutumia amri ya mapumziko. 62 00:03:39,260 --> 00:03:42,640 Tunaweza pia kutumia b abbreviate mapumziko. 63 00:03:42,640 --> 00:03:45,000 Sasa hebu kuanza mpango wa kukimbia tena. 64 00:03:45,000 --> 00:03:48,140 Hapa sisi ni mwanzo wa kuu, kama GDB inatuambia. 65 00:03:48,140 --> 00:03:51,970 mstari wa kanuni hiyo kuhusu kutekeleza lakini bado ana 66 00:03:51,970 --> 00:03:53,480 ni mstari printf. 67 00:03:53,480 --> 00:03:57,200 Tunaweza kuwaambia GDB kutekeleza huu mstari wa kanuni na kwenda mstari unaofuata 68 00:03:57,200 --> 00:03:59,840 na amri ya pili au n. 69 00:03:59,840 --> 00:04:04,120 >> Haki zote, sasa GDB inatuambia kwamba sisi ni juu ya mstari GetInt. 70 00:04:04,120 --> 00:04:06,630 Mimi najua kwamba inaonekana kama mstari printf havijawa 71 00:04:06,630 --> 00:04:10,070 tangu hatuoni "Ingieni chanya integer" magazeti nje kwenye screen, 72 00:04:10,070 --> 00:04:12,040 lakini hakuwa kweli kukimbia. 73 00:04:12,040 --> 00:04:16,029 Nini sisi ni kuona ni mfumo wa uendeshaji kukandamiza kuandika chochote kwa screen 74 00:04:16,029 --> 00:04:19,649 mpaka kabisa ina, ambayo kwa nini debugging na nakala zake 75 00:04:19,649 --> 00:04:21,730 wakati mwingine unaweza kuonekana uhakika. 76 00:04:21,730 --> 00:04:26,240 Anyway, hebu tena kwenda line ya pili ya kificho na kuingia katika int. 77 00:04:26,240 --> 00:04:30,070 Tena, hebu aina 4. 78 00:04:30,070 --> 00:04:34,540 Hivyo hii inaonekana weird. Sisi ni juu ya mstari 12 kulingana na GDB, 79 00:04:34,540 --> 00:04:37,660 lakini mstari unaofuata hiyo kuhusu kutekeleza ni tu Brace curly. 80 00:04:37,660 --> 00:04:42,110 >> Hiyo ina maana sisi ni saa ya mwisho wa kitanzi, yetu kufanya wakati kitanzi kwa kweli, 81 00:04:42,110 --> 00:04:46,710 na GDB anatuambia kwamba hali kusitishwa, yaani hakuna chini ya sifuri, 82 00:04:46,710 --> 00:04:48,010 nitafanya ijayo. 83 00:04:48,010 --> 00:04:50,230 Kama hii milele anapata utata kidogo, 84 00:04:50,230 --> 00:04:54,860 tunaweza kuvuta chanzo code katika GDB na orodha au amri l. 85 00:04:54,860 --> 00:04:56,880 Hii Prints nje chanzo code 86 00:04:56,880 --> 00:04:59,010 hiyo ni unaozingatia kuzunguka mstari kwamba sisi ni sasa juu. 87 00:04:59,010 --> 00:05:03,590 Kama sisi aina orodha au l tena, tutaweza kuona seti ya pili ya mistari magazeti nje. 88 00:05:03,590 --> 00:05:06,070 Tunaweza kufanya hili mpaka sisi hit mwisho wa faili. 89 00:05:06,070 --> 00:05:11,210 >> Ili kupata nyuma ambapo tulikuwa, tunaweza ugavi orodha na idadi ya mstari, 90 00:05:11,210 --> 00:05:14,120 katika kesi hii, line 12. 91 00:05:14,120 --> 00:05:16,040 Anyway, hebu kuendelea. 92 00:05:16,040 --> 00:05:18,240 Sasa sisi ni juu ya kitanzi 4. 93 00:05:18,240 --> 00:05:21,490 Hebu kuhakikisha kwamba num yetu ina variable 4. 94 00:05:21,490 --> 00:05:26,170 Sisi kufanya pamoja na magazeti, au p, amri. 95 00:05:26,170 --> 00:05:31,140 Hivyo, GDB inatuambia kwamba num ni kweli hifadhi 4, kama tulivyotarajia. 96 00:05:31,140 --> 00:05:35,180 $ 1 GDB kwamba Prints nje ni maalum GDB variable 97 00:05:35,180 --> 00:05:37,720 kwamba sasa ni kuweka na kuhifadhi 4 idadi kama vizuri. 98 00:05:37,720 --> 00:05:42,240 Unaweza kupuuza hii kwa sasa, lakini vigezo GDB haya kuja katika Handy super 99 00:05:42,240 --> 00:05:46,380 katika kesi zaidi ya juu wakati unataka kukumbuka nini umefanya kosa huko nyuma. 100 00:05:46,380 --> 00:05:50,970 Anyway, kuhama kwa pili, tunaona kwamba sisi kuanza kusonga kupitia kwa kitanzi. 101 00:05:50,970 --> 00:05:54,790 Hebu kuendelea kupitia hapa na kidogo n kidogo. 102 00:05:54,790 --> 00:05:58,280 Badala ya kuandika n kila wakati, unaweza pia tu hit kuingia. 103 00:05:58,280 --> 00:06:03,710 Wakati wewe hit kuingia bila kuandika chochote, GDB tu akarudisha amri uliopita. 104 00:06:03,710 --> 00:06:05,910 Hivyo sasa tumekuwa hit wito printf. 105 00:06:05,910 --> 00:06:09,520 Inaonekana kama tumekuwa kweli wamekwenda kupitia wetu kwa kitanzi mara 4, 106 00:06:09,520 --> 00:06:13,750 ambayo ni nini tunataka kufanya ili kuzidisha kwa 1, 2, 3, na 4. 107 00:06:13,750 --> 00:06:15,870 >> Kila kitu inaonekana kama ni kazi, 108 00:06:15,870 --> 00:06:19,680 ila wakati sisi hit ijayo tena sisi kupata idadi hii kubwa badala ya 24. 109 00:06:19,680 --> 00:06:23,100 Kama sisi magazeti nje thamani ya p factorial kutumia, 110 00:06:23,100 --> 00:06:26,120 tunaona kwamba factorial gani kuwa hii idadi kubwa ndani yake. 111 00:06:26,120 --> 00:06:28,740 Kitu ambacho dhahiri kwenda vibaya. 112 00:06:28,740 --> 00:06:31,960 Katika hatua hii, ingawa, sisi ni karibu ya mwisho wa mpango, 113 00:06:31,960 --> 00:06:34,610 na ni kuchelewa mno kurekebisha kitu chochote. 114 00:06:34,610 --> 00:06:39,750 >> Hata hivyo, tunaweza kuanzisha upya mpango kwa kuandika r tena na kisha y kuthibitisha. 115 00:06:39,750 --> 00:06:43,460 Sasa tuko nyuma katika breakpoint yetu katika mwanzo wa kuu. 116 00:06:43,460 --> 00:06:46,600 Tunajua kwamba kila kitu inaonekana kuwa nzuri na kusoma katika n. 117 00:06:46,600 --> 00:06:48,630 hivyo tunaweza kuruka mbele na n. 118 00:06:48,630 --> 00:06:52,280 Vinginevyo, tunaweza kuweka breakpoint mpya baada ya kufanya wakati kitanzi 119 00:06:52,280 --> 00:06:54,910 na kuruka huko. Hebu kufanya hivyo. 120 00:06:54,910 --> 00:06:59,080 Inaonekana kama mstari 14 inakuja tu baada ya kitanzi. 121 00:06:59,080 --> 00:07:01,070 Hebu kuweka breakpoint huko. 122 00:07:01,070 --> 00:07:05,220 Ni vizuri mazoezi ya kubainisha jina faili katika amri hii breakpoint 123 00:07:05,220 --> 00:07:08,480 tangu GDB wanaweza kupata kuchanganyikiwa kama wewe ni kufanya kazi na files nyingi. 124 00:07:08,480 --> 00:07:13,230 Kusonga mbele ya breakpoint hii, tutaweza kutumia kuendelea au c amri. 125 00:07:13,230 --> 00:07:16,570 >> Okay, hapa sisi ni wakati kwa kitanzi. 126 00:07:16,570 --> 00:07:19,060 Hebu kwenda 1 zaidi katika mstari kwa kitanzi, 127 00:07:19,060 --> 00:07:21,630 na kisha tutaweza kuanza vigezo uchapishaji kuona nini kinaendelea. 128 00:07:21,630 --> 00:07:26,410 Hebu kuhakikisha kwamba i ni kweli 1, kama ilivyotarajiwa. 129 00:07:26,410 --> 00:07:28,300 Yup, kwamba ni yote mema. 130 00:07:28,300 --> 00:07:30,270 Je kuhusu factorial ingawa? 131 00:07:30,270 --> 00:07:33,760 Ho, kwamba hakuna jema. 132 00:07:33,760 --> 00:07:35,800 Sisi tumepewa kubwa hasi idadi hapa. 133 00:07:35,800 --> 00:07:38,190 How'd kwamba kutokea? 134 00:07:38,190 --> 00:07:40,040 Naam, kama sisi kuangalia nyuma katika kificho, 135 00:07:40,040 --> 00:07:44,800 tunaona kwamba sisi kamwe initialized hivyo, hivyo tumekuwa tu got takataka katika huko. 136 00:07:44,800 --> 00:07:46,820 Ambayo dhahiri kutupa mbali hesabu zetu. 137 00:07:46,820 --> 00:07:49,930 >> Bahati nzuri, hatuna kuondoka GDB kurekebisha hii. 138 00:07:49,930 --> 00:07:54,590 Tunaweza initialize ni haki hapa na kurekebisha katika code baadaye kwa kutumia amri ya kuchapisha. 139 00:07:54,590 --> 00:07:59,500 Tutaweza initialize kwa 1 tangu factorials ya sifuri na 1 ni wawili 1, 140 00:07:59,500 --> 00:08:03,940 na kama sisi initialize kwa sifuri, basi tunatarajia daima kuishia na sifuri kama matokeo yetu. 141 00:08:03,940 --> 00:08:08,370 Unaweza kuweka yoyote kutofautiana kwa njia hii, ambayo ni super Handy. 142 00:08:08,370 --> 00:08:10,920 Sasa, hebu kuendelea na mpango wetu. 143 00:08:10,920 --> 00:08:14,040 Hebu kuhakikisha kila kitu ambapo ni walidhani kuwa. 144 00:08:14,040 --> 00:08:19,090 Hes lazima 4, i lazima 1, na factorial lazima 1 pia. 145 00:08:19,090 --> 00:08:23,990 Tunaweza mkato mchakato huu na magazeti yote ya vigezo yetu ya ndani 146 00:08:23,990 --> 00:08:26,440 na super-kusaidia amri info wenyeji, 147 00:08:26,440 --> 00:08:29,190 ambayo Prints nje wote wa-wigo katika vigezo yetu ya ndani. 148 00:08:29,190 --> 00:08:31,980 Anyway, inaonekana kama kila kitu ni vizuri kwenda. 149 00:08:31,980 --> 00:08:34,700 >> Hebu kufanya mwingine go-kuzunguka ya kitanzi tu kuhakikisha. 150 00:08:34,700 --> 00:08:38,789 Sawa, kila kitu inaonekana kubwa. 151 00:08:38,789 --> 00:08:41,659 Sasa tunaweza kuendelea kutumia amri ya kwenda hadi mwisho. 152 00:08:41,659 --> 00:08:46,170 Tamu! 4 factorial kuchapishwa 24 kama ilivyotarajiwa. 153 00:08:46,170 --> 00:08:48,690 Sasa tunaweza kwenda kurekebisha hii katika code yetu. 154 00:08:48,690 --> 00:08:53,710 Badala ya kujiondoa kutoka GDB, tutaweza kutumia mwingine tab terminal kufanya hili. 155 00:08:53,710 --> 00:08:58,080 Tukirudi kwenye GDB tab yetu, sisi sasa haja ya recompile executable yetu. 156 00:08:58,080 --> 00:09:03,180 Moja ya mambo bora kuhusu GDB ni kwamba huna haja ya kuondoka GDB kuendesha kufanya. 157 00:09:03,180 --> 00:09:06,570 Hivyo kwamba hatuwezi kuendelea kupiga breakpoints zamani, 158 00:09:06,570 --> 00:09:10,440 hebu kuzilemaza na, wewe guessed it, afya amri. 159 00:09:10,440 --> 00:09:13,320 Hii italemaza wote wa breakpoints yetu. 160 00:09:13,320 --> 00:09:18,180 Sasa, tunaweza kuanzisha upya mpango na r na kuhakikisha kila kitu ni sawa. 161 00:09:18,180 --> 00:09:21,300 Inaonekana kama kila kitu ni vizuri kwenda. 162 00:09:21,300 --> 00:09:24,410 Factorial ya prints 4 nje 24, tu kama sisi mawazo. 163 00:09:24,410 --> 00:09:28,830 GDB ni moja ya zana na manufaa zaidi nimepata katika Vifaa yako. 164 00:09:28,830 --> 00:09:31,970 >> Kuna tani zaidi ya mambo unaweza kufanya na GDB, 165 00:09:31,970 --> 00:09:34,030 mbali zaidi kuliko unaweza kufanya na nakala zake rahisi. 166 00:09:34,030 --> 00:09:36,730 Next wakati mpango wako si kufanya nini ungependa, 167 00:09:36,730 --> 00:09:39,740 kujaribu kukimbia GDB kufikiri nini kinaendelea ndani. 168 00:09:39,740 --> 00:09:44,380 Na kidogo ya mazoezi, wewe utakuwa na uwezo wa kuchimba chini kulia juu ya mdudu wako katika wakati hakuna. 169 00:09:44,380 --> 00:09:48,180 Jina langu ni Nate Hardison. Hii ni CS50.