1 00:00:07,170 --> 00:00:12,630 [Powered by Google Translate] GDB, GNU Project Debugger, er öflugt kembiforrit tól fyrir C, 2 00:00:12,630 --> 00:00:14,300 ásamt mörgum öðrum tungumálum. 3 00:00:14,300 --> 00:00:17,440 Það gerir þér kleift að pota í kring inni C forrit á meðan þeir eru að keyra, 4 00:00:17,440 --> 00:00:20,880 og það gefur þér einnig tækifæri til að sjá nákvæmlega hvað gerist 5 00:00:20,880 --> 00:00:22,490 þegar program hrun. 6 00:00:22,490 --> 00:00:24,690 Það er nokkuð sniðugt, ekki satt? 7 00:00:24,690 --> 00:00:27,980 GDB er frjáls hugbúnaður, og það keyrir á mörgum vinsælum UNIX og 8 00:00:27,980 --> 00:00:31,840 Windows-undirstaða stýrikerfi, þannig að það er mjög útbreidd tól. 9 00:00:31,840 --> 00:00:33,560 >> Þú ættir að læra að elska það. 10 00:00:33,560 --> 00:00:36,800 GDB kostir hafa miklu auðveldara tíma mælingar niður bugs 11 00:00:36,800 --> 00:00:39,150 en þeir sem muddle gegnum með gátur 12 00:00:39,150 --> 00:00:41,420 og óendanlega magn af yfirlýsingum útprentun. 13 00:00:41,420 --> 00:00:45,810 GDB er stjórn-lína tól, sem þýðir að þú getur samskipti við það í flugstöðinni 14 00:00:45,810 --> 00:00:49,720 útgáfu skipanir í gegnum lyklaborðið í stað þess að smella hnappar með músinni. 15 00:00:49,720 --> 00:00:54,960 >> Til að byrja upp GDB, bókstaflega þú réttlátur tegund gdb á skjóta og högg koma inn í. 16 00:00:54,960 --> 00:00:58,230 Þú munt sjá nokkrar línur prenta út á skjáinn 17 00:00:58,230 --> 00:01:00,810 sýna þér útgáfu af GDB sem þú ert að keyra, 18 00:01:00,810 --> 00:01:07,890 upplýsingar um höfundarrétt þess, og í lok þú munt sjá gdb skipanir: (gdb). 19 00:01:07,890 --> 00:01:10,770 Þetta gerir þér kleift að vita að GDB er tilbúinn fyrir skipanir. 20 00:01:10,770 --> 00:01:15,400 Á þessum tímapunkti, er það mikilvægasta til að vita hvernig á að gera hætta. 21 00:01:15,400 --> 00:01:17,790 Sem betur fer, þetta er frekar einfalt. 22 00:01:17,790 --> 00:01:19,840 Hættir að reykja stjórn er bara þessi. 23 00:01:19,840 --> 00:01:23,090 Eins og a smákaka, getur þú bara að nota Q líka. 24 00:01:23,090 --> 00:01:27,410 Eins gaman og stígvél upp gdb og þá tafarlaust hætta er 25 00:01:27,410 --> 00:01:30,800 við skulum nú tala um að nota gdb til að kemba forrit. 26 00:01:30,800 --> 00:01:34,630 >> Til að byrja, hef ég fengið forrit hér í factorial.c 27 00:01:34,630 --> 00:01:37,380 sem fær int og reynir að reikna þáttatilraun þess. 28 00:01:37,380 --> 00:01:41,270 Ef þú hefur ekki séð factorials áður eða man ekki þá, 29 00:01:41,270 --> 00:01:47,840 Aðfeldi fjölda n er jöfn margfeldi n - (n - 1), (n - 2), og svo framvegis - 30 00:01:47,840 --> 00:01:49,230 þar til þú högg 1. 31 00:01:49,230 --> 00:01:54,550 Því aðfeldi 3 er 3 * 2 * 1, eða 6, 32 00:01:54,550 --> 00:02:00,180 og aðfeldi 4 er 4 * 3 * 2 * 1, eða 24. 33 00:02:00,180 --> 00:02:03,970 Aðfeldi núll er skrýtið mál, það er 1, 34 00:02:03,970 --> 00:02:06,970 og factorials um neikvæðar heiltölur eru ekki skilgreind. 35 00:02:06,970 --> 00:02:10,280 Engu að síður, eitthvað um þáttarannsókn program minn er angurvær. 36 00:02:10,280 --> 00:02:15,410 Þegar ég hlaupa það, prenta það út undarlegt númer sem hafa ekkert að gera með factorials. 37 00:02:15,410 --> 00:02:19,030 >> Svo getum við notað gdb til að reikna út hvað er að gerast. 38 00:02:19,030 --> 00:02:21,720 GDB starfar á executable skrá, 39 00:02:21,720 --> 00:02:24,910 sem eru tvöfaldur skrár framleitt af samantekt aðferð. 40 00:02:24,910 --> 00:02:30,940 Það er, við getum ekki keyrt gdb á. C okkar eða. Klst kóðann skrá eins factorial.c. 41 00:02:30,940 --> 00:02:34,650 Við viljum til að keyra það á bara þáttatilraun staðinn. 42 00:02:34,650 --> 00:02:38,340 Ef forritið þurfa allir stjórn-lína rök, 43 00:02:38,340 --> 00:02:40,230 þetta er þar sem við myndum skilgreina þá. 44 00:02:40,230 --> 00:02:44,050 Í þessu tilfelli, þáttatilraun hjartarskinn ekki þurfa allir stjórn-lína rök, 45 00:02:44,050 --> 00:02:46,410 svo við réttlátur tegund hlaupa eða r fyrir stuttu. 46 00:02:46,410 --> 00:02:50,440 >> Þetta mun byrja aðfeldi forrit í gangi. 47 00:02:50,440 --> 00:02:53,940 Þegar forritið hættir í gangi, ég fá GDB mín hvetja til baka. 48 00:02:53,940 --> 00:02:58,130 Jæja, við skulum reyna það sama aftur, aðfeldi 4. 49 00:02:58,130 --> 00:03:02,910 Allt í lagi, við sjáum að við erum að fá sams konar rusli hér í gdb. 50 00:03:02,910 --> 00:03:04,850 Nú þegar forritið hefur lokið, 51 00:03:04,850 --> 00:03:06,870 við getum ekki farið í og ​​aðgang að einhverju af stöðu, 52 00:03:06,870 --> 00:03:09,870 þannig að við þurfum að byrja það í gangi á ný áður en við getum séð hvað er að gerast. 53 00:03:09,870 --> 00:03:13,570 Hins vegar þurfum við leið til að stöðva það á meðan það er í the miðja af hlaupa. 54 00:03:13,570 --> 00:03:16,970 >> Til að gera það, notum við það sem er kallað breakpoint. 55 00:03:16,970 --> 00:03:21,880 Breakpoints segja gdb til að gera hlé á dagskrá í ákveðna aðgerð eða fengið kóða línu 56 00:03:21,880 --> 00:03:24,070 svo að við getum athuga ástand af the program, 57 00:03:24,070 --> 00:03:27,380 gildi af breytum, stöðu minni og svo á þeim tímapunkti. 58 00:03:27,380 --> 00:03:30,750 Þar sem ég í raun ekki vita hvar hlutirnir eru að fara úrskeiðis, 59 00:03:30,750 --> 00:03:33,510 >> Ég vil bara byrja kembiforrit rétt í upphafi, 60 00:03:33,510 --> 00:03:36,510 rétt þegar helstu hefst. 61 00:03:36,510 --> 00:03:39,260 Við munum setja breakpoint í upphafi helstu með brot stjórn. 62 00:03:39,260 --> 00:03:42,640 Við getum líka notað b að skammstafa brot. 63 00:03:42,640 --> 00:03:45,000 Nú skulum byrja forritið að keyra aftur. 64 00:03:45,000 --> 00:03:48,140 Hér erum við í upphafi helstu, eins og GDB segir okkur. 65 00:03:48,140 --> 00:03:51,970 Línan af kóða sem er að fara að framkvæma en hefur ekki enn 66 00:03:51,970 --> 00:03:53,480 er printf línu. 67 00:03:53,480 --> 00:03:57,200 Við getum sagt gdb til að framkvæma þessa línu af kóða og fara í næstu línu 68 00:03:57,200 --> 00:03:59,840 með næstu eða N stjórn. 69 00:03:59,840 --> 00:04:04,120 >> Allt í lagi, nú segir GDB okkur að við erum á GetInt línu. 70 00:04:04,120 --> 00:04:06,630 Ég veit að það virðist eins og printf línan ekki keyrt 71 00:04:06,630 --> 00:04:10,070 þar sem við sjáum ekki "Sláðu inn jákvæð heiltala" prenta út á skjánum, 72 00:04:10,070 --> 00:04:12,040 en það var í raun að keyra. 73 00:04:12,040 --> 00:04:16,029 Það sem við erum að sjá er stýrikerfi bæla skrifa eitthvað á skjáinn 74 00:04:16,029 --> 00:04:19,649 þar til það hefur algerlega til, sem hverju kembiforrit og prenta 75 00:04:19,649 --> 00:04:21,730 getur stundum virðist óáreiðanlegar. 76 00:04:21,730 --> 00:04:26,240 Engu að síður, við skulum aftur fara í næstu línu af kóða og inn í int. 77 00:04:26,240 --> 00:04:30,070 Aftur, við skulum gerð 4. 78 00:04:30,070 --> 00:04:34,540 Svo lítur þetta undarlegt. Við erum á línu 12 samkvæmt gdb, 79 00:04:34,540 --> 00:04:37,660 en næsta lína sem er að fara að framkvæma er bara hrokkið Brace. 80 00:04:37,660 --> 00:04:42,110 >> Það þýðir bara að við erum í lok lykkju, gerum okkar meðan lykkja í raun, 81 00:04:42,110 --> 00:04:46,710 og GDB er að segja okkur að uppsögn ástand, þ.e. ekkert minna en núll, 82 00:04:46,710 --> 00:04:48,010 mun framkvæma næst. 83 00:04:48,010 --> 00:04:50,230 Ef þetta alltaf fær svolítið truflandi, 84 00:04:50,230 --> 00:04:54,860 við getum draga upp kóðann í GDB með lista eða L stjórn. 85 00:04:54,860 --> 00:04:56,880 Þessi prentar út kóðann 86 00:04:56,880 --> 00:04:59,010 sem er með miðju í kringum línu sem við erum nú á. 87 00:04:59,010 --> 00:05:03,590 Ef við gerð lista eða L aftur, munum við sjá næsta sett af línum prenta út. 88 00:05:03,590 --> 00:05:06,070 Við getum gert þetta þangað til við högg the endir af the skrá. 89 00:05:06,070 --> 00:05:11,210 >> Til að komast aftur þar sem við vorum, getum við framboð lista með línu númer, 90 00:05:11,210 --> 00:05:14,120 í þessu tilfelli, lína 12. 91 00:05:14,120 --> 00:05:16,040 Engu að síður, við skulum halda af stað. 92 00:05:16,040 --> 00:05:18,240 Nú erum við á 4 hliðar. 93 00:05:18,240 --> 00:05:21,490 Við skulum tryggja að NUM breyta okkar inniheldur 4. 94 00:05:21,490 --> 00:05:26,170 Við gerum þetta með prenti, eða P, stjórn. 95 00:05:26,170 --> 00:05:31,140 Svo, GDB segir okkur að NUM er örugglega að geyma 4, eins og við gerðum ráð fyrir. 96 00:05:31,140 --> 00:05:35,180 The $ 1 sem GDB prentar er út sérstakt GDB breytu 97 00:05:35,180 --> 00:05:37,720 sem er nú stillt til að geyma númer 4 eins og heilbrigður. 98 00:05:37,720 --> 00:05:42,240 Þú getur hunsa þetta fyrir nú, en þessi gdb breytur koma super vel 99 00:05:42,240 --> 00:05:46,380 í fleiri háþróaður tilvikum þegar þú vilt að muna það sem þú hefur gert í fortíðinni. 100 00:05:46,380 --> 00:05:50,970 Engu að síður, færa á og næst, sjáum við að við byrjum að fara í gegnum til hliðar. 101 00:05:50,970 --> 00:05:54,790 Við skulum halda áfram með hér með n smátt og smátt. 102 00:05:54,790 --> 00:05:58,280 Frekar en að slá n hvert sinn, getur þú líka bara högg koma inn í. 103 00:05:58,280 --> 00:06:03,710 Þegar þú högg inn án þess að skrifa neitt, GDB endurtekur bara fyrri skipunina. 104 00:06:03,710 --> 00:06:05,910 Svo nú höfum við högg the printf hringja. 105 00:06:05,910 --> 00:06:09,520 Það lítur út eins og við höfum reyndar farið í gegnum okkar fyrir lykkju 4 sinnum, 106 00:06:09,520 --> 00:06:13,750 sem er það sem við viljum gera til að margfalda með 1, 2, 3 og 4. 107 00:06:13,750 --> 00:06:15,870 >> Allt virðist eins og það er að vinna, 108 00:06:15,870 --> 00:06:19,680 nema þegar við högg næst aftur fáum við þessa mikla fjölda í stað 24. 109 00:06:19,680 --> 00:06:23,100 Ef við prenta út verðmæti þáttarannsókn með p, 110 00:06:23,100 --> 00:06:26,120 sjáum við að þáttatilraun hjartarskinn hafa þetta miklum fjölda í það. 111 00:06:26,120 --> 00:06:28,740 Eitthvað er ákveðið að fara úrskeiðis. 112 00:06:28,740 --> 00:06:31,960 Á þessum tímapunkti, þó, við erum nánast í lok áætlunarinnar, 113 00:06:31,960 --> 00:06:34,610 og það er of seint að laga neitt. 114 00:06:34,610 --> 00:06:39,750 >> Hins vegar getum við endurræsa kerfið með því að slá r aftur og Y til að staðfesta. 115 00:06:39,750 --> 00:06:43,460 Nú erum við aftur á breakpoint okkar í byrjun Main. 116 00:06:43,460 --> 00:06:46,600 Við vitum að allt virðist vera í lagi með að lesa í n. 117 00:06:46,600 --> 00:06:48,630 svo við getum hoppað á undan með n. 118 00:06:48,630 --> 00:06:52,280 Einnig getum við sett nýja breakpoint eftir að gera á meðan lykkja 119 00:06:52,280 --> 00:06:54,910 og stökk þar. Við skulum gera það. 120 00:06:54,910 --> 00:06:59,080 Útlit eins og lína 14 kemur bara eftir lykkju. 121 00:06:59,080 --> 00:07:01,070 Við skulum setja breakpoint þar. 122 00:07:01,070 --> 00:07:05,220 Það er gott að tilgreina skrá nafn í þessari breakpoint stjórn 123 00:07:05,220 --> 00:07:08,480 þar GDB hægt að fá rugla ef þú ert að vinna með margar skrár. 124 00:07:08,480 --> 00:07:13,230 Til að færa undan þessu breakpoint, munum við nota halda áfram eða c stjórn. 125 00:07:13,230 --> 00:07:16,570 >> Jæja, hér við erum í for lykkju. 126 00:07:16,570 --> 00:07:19,060 Við skulum fara 1 fleiri línu inn í for lykkju, 127 00:07:19,060 --> 00:07:21,630 og þá munum við hefja prentun breytur til að sjá hvað er að gerast. 128 00:07:21,630 --> 00:07:26,410 Við skulum vera viss um að ég sé örugglega 1, eins og búist var við. 129 00:07:26,410 --> 00:07:28,300 Jamm, það er allt gott. 130 00:07:28,300 --> 00:07:30,270 Hvað þáttatilraun þó? 131 00:07:30,270 --> 00:07:33,760 Vá, það er ekki gott. 132 00:07:33,760 --> 00:07:35,800 Við höfum fengið mikil neikvæð tala hér. 133 00:07:35,800 --> 00:07:38,190 Hvernig gekk að gerast? 134 00:07:38,190 --> 00:07:40,040 Jæja, ef við lítum aftur á númerið, 135 00:07:40,040 --> 00:07:44,800 sjáum við að við aldrei frumstilla hana, þannig að við höfum bara rusl þar. 136 00:07:44,800 --> 00:07:46,820 Það mun örugglega skekkt útreikninga okkar. 137 00:07:46,820 --> 00:07:49,930 >> Sem betur fer höfum við ekki að fara gdb til að laga þetta. 138 00:07:49,930 --> 00:07:54,590 Við getum frumstilla hana hérna og festa það í númerið síðar með prenta stjórn. 139 00:07:54,590 --> 00:07:59,500 Við munum frumstilla hana 1 þar sem factorials af núll og 1 eru bæði 1, 140 00:07:59,500 --> 00:08:03,940 og ef við frumstilla hana á núll, þá við myndum alltaf enda með núll eins vegna okkar. 141 00:08:03,940 --> 00:08:08,370 Þú getur stillt hvaða breytu þessum hætti, sem er frábær vel. 142 00:08:08,370 --> 00:08:10,920 Nú, við skulum halda áfram áætlun okkar. 143 00:08:10,920 --> 00:08:14,040 Við skulum vera viss um allt er þar sem það er ætlast til að vera. 144 00:08:14,040 --> 00:08:19,090 Num ætti að vera 4, ætti ég að vera 1, og þáttatilraun vera 1 líka. 145 00:08:19,090 --> 00:08:23,990 Við getum flýtileið þetta ferli og prenta allar staðbundnar breytur okkar 146 00:08:23,990 --> 00:08:26,440 með frábær-gagnlegt stjórn upplýsa heimamenn, 147 00:08:26,440 --> 00:08:29,190 sem prentar út allar í umfang okkar heimamaður breytur. 148 00:08:29,190 --> 00:08:31,980 Engu að síður lítur það eins og allt er gott að fara. 149 00:08:31,980 --> 00:08:34,700 >> Við skulum gera annað fara-í kring um lykkju bara til að vera viss. 150 00:08:34,700 --> 00:08:38,789 Jæja, allt lítur vel út. 151 00:08:38,789 --> 00:08:41,659 Nú getum við notað að halda áfram stjórn til að fara til enda. 152 00:08:41,659 --> 00:08:46,170 Sweet! 4 þáttatilraun prenta út 24 eins og búast mætti ​​við. 153 00:08:46,170 --> 00:08:48,690 Nú getum við farið festa þetta í númerið okkar. 154 00:08:48,690 --> 00:08:53,710 Frekar en að hætta út af GDB, munum við nota annað flugstöðinni flipann til að gera þetta. 155 00:08:53,710 --> 00:08:58,080 Fara aftur til gdb flipanum okkar, þurfum við nú að laun executable okkar. 156 00:08:58,080 --> 00:09:03,180 Einn af the bestur hlutur óður gdb er að þú þarft ekki að fara gdb til að keyra að. 157 00:09:03,180 --> 00:09:06,570 Svo að við gerum ekki viðurværi hitting gamla Rofstaðir, 158 00:09:06,570 --> 00:09:10,440 við skulum gera þá með, þú giska á það, gera stjórn. 159 00:09:10,440 --> 00:09:13,320 Þetta mun gera allt breakpoints okkar. 160 00:09:13,320 --> 00:09:18,180 Nú getum við endurræsa kerfið með R og ganga úr skugga um allt sé í lagi. 161 00:09:18,180 --> 00:09:21,300 Útlit eins og allt er gott að fara. 162 00:09:21,300 --> 00:09:24,410 Aðfeldi 4 prentar út 24, alveg eins og við héldum. 163 00:09:24,410 --> 00:09:28,830 GDB er einn af the hjálpsamur tól sem þú hefur fengið í verkfærakista þinn. 164 00:09:28,830 --> 00:09:31,970 >> Það eru tonn fleiri hlutir sem þú getur gert með gdb, 165 00:09:31,970 --> 00:09:34,030 miklu meira en hægt er að gera með einföldum prenta. 166 00:09:34,030 --> 00:09:36,730 Næst þegar kerfið er ekki að gera það sem þú vilt, 167 00:09:36,730 --> 00:09:39,740 reyna að keyra gdb til að reikna út hvað er að gerast inni. 168 00:09:39,740 --> 00:09:44,380 Með smá æfingu verður þú að vera fær um að bora niður rétt á galla í neitun tími. 169 00:09:44,380 --> 00:09:48,180 Ég heiti Nate Hardison. Þetta er CS50.