1 00:00:00,000 --> 00:00:05,640 2 00:00:05,640 --> 00:00:06,830 >> Doug LLOYD: Visos teisės GDB. 3 00:00:06,830 --> 00:00:08,480 Kas tai tiksliai? 4 00:00:08,480 --> 00:00:11,310 Taigi GDB, kuris reiškia už GNU Debugger, 5 00:00:11,310 --> 00:00:15,040 yra tikrai nuostabus įrankis, kad mes galime naudoti, siekiant padėti mums derinti savo programas, 6 00:00:15,040 --> 00:00:18,210 arba sužinoti, kur viskas yra negerai mūsų programas. 7 00:00:18,210 --> 00:00:22,590 GDB yra stebėtinai galingas, tačiau produkcijos ir sąveikos su juo 8 00:00:22,590 --> 00:00:23,830 gali būti šiek tiek paslaptingas. 9 00:00:23,830 --> 00:00:28,210 Tai paprastai komandų eilutės įrankis, ir jis gali mesti daug pranešimų į tave. 10 00:00:28,210 --> 00:00:31,144 Ir ji gali tipo sunku išanalizuoti tiksliai, kas vyksta. 11 00:00:31,144 --> 00:00:33,560 Laimei, mes ėmėsi veiksmų išspręsti šią problemą už jus 12 00:00:33,560 --> 00:00:36,281 kaip jūs dirbate per CS50. 13 00:00:36,281 --> 00:00:39,030 Jei nesate naudojant grafines debugeris, kuris mano kolega Dan 14 00:00:39,030 --> 00:00:41,570 Armandarse kalbėjo gana šiek tiek apie į vaizdo įrašą, kuris 15 00:00:41,570 --> 00:00:44,740 turėtų būti daugiau nei čia dabar, jums gali prireikti 16 00:00:44,740 --> 00:00:48,270 naudoti šias komandų eilutę Įrankiai darbui su GDB. 17 00:00:48,270 --> 00:00:51,250 Jei dirbate į CS50 IDE, jums nereikia tai padaryti. 18 00:00:51,250 --> 00:00:53,550 Tačiau, jei nesate dirba CS50 IDE, 19 00:00:53,550 --> 00:00:55,750 galbūt naudojant versija iš CS50 Appliance, 20 00:00:55,750 --> 00:00:58,860 ar kitas Linux operacinė sistema su GDB įdiegta, 21 00:00:58,860 --> 00:01:00,980 Jums gali tekti naudoti Šie komandinės eilutės įrankius. 22 00:01:00,980 --> 00:01:02,860 >> O kadangi jums gali turi padaryti, tai 23 00:01:02,860 --> 00:01:06,280 Naudinga tiesiog suprasti, kaip GDB veikia iš komandinės eilutės. 24 00:01:06,280 --> 00:01:09,650 Bet vėl, jei esate naudojant CS50 IDE, jums 25 00:01:09,650 --> 00:01:15,400 galite naudoti grafinį debugerem kuris yra pastatytas į IDE. 26 00:01:15,400 --> 00:01:18,750 Taigi, norint gauti dalykų vyksta su GDB, pradėti derinti 27 00:01:18,750 --> 00:01:21,220 procesas ypač programa, viskas, ką jums reikia padaryti, 28 00:01:21,220 --> 00:01:23,810 tai tipo GDB po pagal programos pavadinimą. 29 00:01:23,810 --> 00:01:28,620 Taigi, pavyzdžiui, jei jūsų programa yra Sveiki, turėtumėte įvesti GDB labas. 30 00:01:28,620 --> 00:01:31,210 >> Kai tai padarysite, jūs ketinate atsigriebti GDB aplinką. 31 00:01:31,210 --> 00:01:33,800 Jūsų greitas keisis ir vietoj to, kad tai, ką ji paprastai 32 00:01:33,800 --> 00:01:35,841 yra tada, kai įvedate dalykus Į komandų line-- ls, 33 00:01:35,841 --> 00:01:38,115 cd-- visi jūsų tipiškų "Linux" komandos, savo eilutę 34 00:01:38,115 --> 00:01:42,200 keisis galbūt kažką kaip skliausteliuose GDB skliausteliuose. 35 00:01:42,200 --> 00:01:46,630 Štai jūsų naują GDB greitai, nes esate viduje GDB aplinkoje. 36 00:01:46,630 --> 00:01:49,830 Kai viduje toje aplinkoje, ten du pagrindiniai komandos 37 00:01:49,830 --> 00:01:52,290 kad jūs tikriausiai naudoti tokia tvarka. 38 00:01:52,290 --> 00:01:55,200 >> Pirmasis yra b, kuris yra trumpas pertraukos. 39 00:01:55,200 --> 00:01:58,690 Ir po to, kai B tipo, jums paprastai įveskite pavadinimą funkcija, 40 00:01:58,690 --> 00:02:01,040 arba, jei atsitiktų žinoti maždaug kas eilutės numeris 41 00:02:01,040 --> 00:02:04,100 Jūsų programa pradeda elgtis truputį keistai, 42 00:02:04,100 --> 00:02:06,370 galite įrašykite linija Taškų ten taip pat. 43 00:02:06,370 --> 00:02:09,660 Kas B arba pertrauka, ar tai leidžia savo programą 44 00:02:09,660 --> 00:02:13,270 paleisti iki tam tikro taško, būtent, funkcijos pavadinimas 45 00:02:13,270 --> 00:02:15,880 kad jūs nurodote ar linija skaičius, kad jūs nurodote. 46 00:02:15,880 --> 00:02:18,590 >> Ir tuo momentu, tai bus įšaldyti vykdymą. 47 00:02:18,590 --> 00:02:21,670 Tai yra tikrai geras dalykas, nes kartą vykdymas buvo užšaldytas, 48 00:02:21,670 --> 00:02:25,214 galite pradėti labai lėtai žingsnis per savo programą. 49 00:02:25,214 --> 00:02:28,130 Paprastai, jei jau veikia jūsų programas, jie gana trumpas. 50 00:02:28,130 --> 00:02:31,250 Paprastai įvesite dot velniop viską, Jūsų programos pavadinimas, paspauskite Enter, 51 00:02:31,250 --> 00:02:33,470 prieš galite mirksėti, jūsų programa jau baigta. 52 00:02:33,470 --> 00:02:36,620 Tai tikrai ne laikas pabandyti daug ir išsiaiškinti, kas vyksta negerai. 53 00:02:36,620 --> 00:02:40,920 Taigi, tai tikrai, kad būtų galima sulėtinti dalykus nustatę pertraukos tašką su B, 54 00:02:40,920 --> 00:02:43,040 ir tada žengia į. 55 00:02:43,040 --> 00:02:46,169 >> Tada, kai jūs nustatyti savo pertrauką taškas, galite paleisti programą. 56 00:02:46,169 --> 00:02:47,960 Ir jei jūs turite bet kurį komandinės eilutės argumentai, 57 00:02:47,960 --> 00:02:51,610 Jūs juos nurodyti čia ne tada, kai įvedate GDB jūsų programos pavadinimas. 58 00:02:51,610 --> 00:02:55,980 Jūs nurodote visą komandinę eilutę argumentai, imantis R, arba paleisti, 59 00:02:55,980 --> 00:03:00,270 ir tada kokia komandinės eilutės argumentai jums reikia viduje savo programą. 60 00:03:00,270 --> 00:03:03,510 Yra kitas numeris tikrai svarbus ir naudingas komandas 61 00:03:03,510 --> 00:03:04,970 viduje BVP aplinkoje. 62 00:03:04,970 --> 00:03:07,540 Taigi leiskite man tiesiog greitai eiti per kai kurias iš jų. 63 00:03:07,540 --> 00:03:11,320 >> Pirmasis yra n, kuris yra trumpas kitą, ir jūs galite įvesti Kitas vietoj n, 64 00:03:11,320 --> 00:03:12,304 tiek dirbtų. 65 00:03:12,304 --> 00:03:13,470 Ir tai tik sutrumpinimas. 66 00:03:13,470 --> 00:03:17,540 Ir kaip jūs tikriausiai jau įsigijo naudojamas, kad galėtų įvesti dalykus 67 00:03:17,540 --> 00:03:20,520 trumpesnis paprastai yra geriau. 68 00:03:20,520 --> 00:03:24,100 Ir ką jis darys tai bus žingsnis į priekį vieną bloką kodą. 69 00:03:24,100 --> 00:03:26,170 Taigi jis bus judėti pirmyn kol skambinimo funkcijos. 70 00:03:26,170 --> 00:03:28,350 Ir tada vietoj Nardymas į tą funkciją 71 00:03:28,350 --> 00:03:33,130 ir vyksta per visus, kuris veikia kodas, ji bus tiesiog turi funkciją. 72 00:03:33,130 --> 00:03:34,400 >> Ši funkcija bus vadinamas. 73 00:03:34,400 --> 00:03:35,733 Jis padarys viską, jos darbas yra. 74 00:03:35,733 --> 00:03:38,870 Jis grįš vertę funkcija, kad pavadino ją. 75 00:03:38,870 --> 00:03:42,490 Ir tada jums pereiti į kitą eilutę tos skambinimo funkcija. 76 00:03:42,490 --> 00:03:44,555 Jei norite žingsnis viduje funkcija, 77 00:03:44,555 --> 00:03:46,430 vietoj tiesiog tai vykdyti, ypač 78 00:03:46,430 --> 00:03:50,004 jei manote, kad problemos gali gulėti viduje šią funkciją, 79 00:03:50,004 --> 00:03:52,670 galima, žinoma, nustatyti pertraukos atkreipti viduje šią funkciją. 80 00:03:52,670 --> 00:03:57,820 Arba, jei jūs jau veikia, galite naudoti S žingsnis į priekį vieną eilutę kodo. 81 00:03:57,820 --> 00:04:01,170 >> Taigi, tai bus žingsnis ir pasinerti į funkcijas, 82 00:04:01,170 --> 00:04:04,750 o ne tik turėti vykdyti ir tęsiant į funkciją 83 00:04:04,750 --> 00:04:07,380 kad esate už derinti. 84 00:04:07,380 --> 00:04:09,870 Jei kada nors norėsite žinoti kintamųjų vertės, 85 00:04:09,870 --> 00:04:12,507 galite įvesti p, arba spausdinti, ir tada kintamasis, pavadinimas. 86 00:04:12,507 --> 00:04:15,090 Tai ir bus išspausdinti jums, viduje GDB aplinkoje, 87 00:04:15,090 --> 00:04:19,110 kintamojo vardas, kad you-- dovanokite me-- kintamojo vertę 88 00:04:19,110 --> 00:04:20,064 kad jūs pavadinimu. 89 00:04:20,064 --> 00:04:23,230 Jei norite žinoti, kas vertybes vietos kintamasis prieinamas iš kur 90 00:04:23,230 --> 00:04:25,970 Jūs šiuo metu yra jūsų programa, galite įvesti info gyventojais. 91 00:04:25,970 --> 00:04:28,332 Tai daug greičiau nei rašyti P ir tada kas, 92 00:04:28,332 --> 00:04:30,540 sąrašą įgyvendinti visus kintamieji, kad jūs žinote egzistuoja. 93 00:04:30,540 --> 00:04:34,370 Galite įvesti info vietiniai, ir jis bus išspausdinti viską už jus. 94 00:04:34,370 --> 00:04:37,770 Toliau, BT, kuri yra trumpas Atgal pėdsakų. 95 00:04:37,770 --> 00:04:41,680 Dabar, paprastai, ypač anksti CS50, 96 00:04:41,680 --> 00:04:44,450 jūs ne iš tikrųjų turėti proga naudoti BT, arba Atgal, Trace, 97 00:04:44,450 --> 00:04:47,860 nes jūs neturi funkcijos kad skambinti kitas funkcijas. 98 00:04:47,860 --> 00:04:50,450 >> Jums gali tekti pagrindinis paskambinti funkcija, bet tai tikriausiai jis. 99 00:04:50,450 --> 00:04:53,199 Jūs neturite tą kitą funkciją paskambinę kitą funkciją, kuri 100 00:04:53,199 --> 00:04:54,880 prašo kitą funkciją, ir taip toliau. 101 00:04:54,880 --> 00:04:57,550 Bet kaip jūsų programas gauti daugiau kompleksas, o ypač 102 00:04:57,550 --> 00:05:00,290 kai pradėsite dirbti su rekursijos, nugaros pėdsakų 103 00:05:00,290 --> 00:05:05,150 gali būti tikrai naudingas būdas jums rūšies kažkiek už kur kontekstą 104 00:05:05,150 --> 00:05:06,460 Aš esu savo programą. 105 00:05:06,460 --> 00:05:10,590 Taigi sakau jums parašiau savo kodą, ir jūs žinote, kad pagrindinis ragina funkciją 106 00:05:10,590 --> 00:05:14,720 f, kurioje raginama funkciją g, kurioje raginama funkciją h. 107 00:05:14,720 --> 00:05:17,650 Taigi, mes turime keletą sluoksnių ilsėtųsi vyksta čia. 108 00:05:17,650 --> 00:05:19,440 >> Jei esate viduje Jūsų GDB aplinka, 109 00:05:19,440 --> 00:05:21,640 ir jūs žinote savo vidų iš H, tačiau pamiršote 110 00:05:21,640 --> 00:05:27,210 apie tai, ką turiu jums, kur jūs are-- galite įvesti bt ar nugaros pėdsakų, 111 00:05:27,210 --> 00:05:32,370 ir ji bus atspausdinti h, G, f pagrindinis, kartu su kitu informacijos, kuri 112 00:05:32,370 --> 00:05:35,984 suteikia jums clue, kad Gerai pagrindinis vadinamas, f, g, f, vadinamą, g vadinamas h greičiu, 113 00:05:35,984 --> 00:05:37,900 ir tai, kur aš Šiuo metu esu savo programą. 114 00:05:37,900 --> 00:05:41,380 Taigi ji gali būti tikrai naudinga, ypač kaip paslaptingas-ness iš GDB 115 00:05:41,380 --> 00:05:45,667 tampa šiek tiek absoliuti, kad sužinoti, kur tiksliai viskas yra. 116 00:05:45,667 --> 00:05:48,500 Galiausiai, kai jūsų programa yra padaryta, arba kai baigsite derinti ją 117 00:05:48,500 --> 00:05:50,125 ir norite žingsnį iš GDB aplinkoje, 118 00:05:50,125 --> 00:05:51,940 ji padeda sužinoti, kaip gauti iš jo. 119 00:05:51,940 --> 00:05:55,500 Galite įvesti q, arba Baigti, išeiti. 120 00:05:55,500 --> 00:05:59,220 Dabar, prieš šiandienos video Aš parengė Buggy programą 121 00:05:59,220 --> 00:06:03,900 vadinamas buggy1, kurį aš sudarytas iš failo žinomas kaip buggy1.c. 122 00:06:03,900 --> 00:06:06,500 Kaip galima tikėtis, šis Programa yra iš tikrųjų Buggy. 123 00:06:06,500 --> 00:06:08,990 Kažkas negerai kai bandau ir paleisti jį. 124 00:06:08,990 --> 00:06:13,014 Dabar, deja, aš netyčia ištrinti savo buggy1.c failą, 125 00:06:13,014 --> 00:06:15,930 taip, kad man išsiaiškinti, kas vyksta negerai su šia programa, 126 00:06:15,930 --> 00:06:18,770 Aš ruošiuosi naudoti GDB rūšies aklai, bando 127 00:06:18,770 --> 00:06:22,372 Norėdami naršyti šią programą išsiaiškinti tiksliai, kas vyksta negerai. 128 00:06:22,372 --> 00:06:24,580 Tačiau naudojant tik tuos įrankius mes jau sužinojau apie, 129 00:06:24,580 --> 00:06:27,700 mes galime gana daug skaičių tiksliai kas tai yra. 130 00:06:27,700 --> 00:06:30,740 Taigi leiskite per galvą CS50 IDE ir turėti išvaizdą. 131 00:06:30,740 --> 00:06:33,155 Gerai, kad mes čia mano CS50 IDE aplinka, 132 00:06:33,155 --> 00:06:35,697 ir aš priartinti trupučiu todėl jūs galite pamatyti šiek tiek daugiau. 133 00:06:35,697 --> 00:06:38,530 Mano terminalo langą, jei aš sąrašą Į mano dabartinis direktorius turinys 134 00:06:38,530 --> 00:06:41,250 su LS, matysime, kad aš turėti šaltinio failus pora 135 00:06:41,250 --> 00:06:44,982 čia, įskaitant aptarta anksčiau buggy1. 136 00:06:44,982 --> 00:06:46,940 Kas tiksliai vyksta, kai Aš stengiuosi ir paleisti buggy1. 137 00:06:46,940 --> 00:06:47,773 Na tegul sužinoti. 138 00:06:47,773 --> 00:06:52,510 I tipo dot velniop, Buggy, ir aš paspauskite Enter. 139 00:06:52,510 --> 00:06:53,670 >> Segmentavimas gedimus. 140 00:06:53,670 --> 00:06:55,000 Tai nėra gerai. 141 00:06:55,000 --> 00:06:57,180 Jei prisimenate A segmentavimo kaltės paprastai 142 00:06:57,180 --> 00:07:01,540 atsiranda tada, kai mes Access Memory kad mes negali paliesti. 143 00:07:01,540 --> 00:07:03,820 Mes kažkaip pasiekė ne iš ribų 144 00:07:03,820 --> 00:07:05,995 kas programą, kompiliatorius, davė mums. 145 00:07:05,995 --> 00:07:08,310 Ir taip jau tai yra raktas išlaikyti rinkinio 146 00:07:08,310 --> 00:07:10,660 kaip mes pradėti derinimo procesą. 147 00:07:10,660 --> 00:07:13,620 Kažkas nuėjo šiek tiek negerai čia. 148 00:07:13,620 --> 00:07:15,935 >> Visos teisės, todėl pradėkime Up GDB aplinkoje 149 00:07:15,935 --> 00:07:19,030 ir pamatyti, jei mes galime išsiaiškinti, kas tiksliai yra problema. 150 00:07:19,030 --> 00:07:21,674 Aš ruošiuosi išvalyti ekraną, ir aš ruošiuosi rašyti GDB 151 00:07:21,674 --> 00:07:24,340 vėl patekti į GDB aplinką, ir programos pavadinimas 152 00:07:24,340 --> 00:07:27,450 kad aš noriu derinti, buggy1. 153 00:07:27,450 --> 00:07:30,182 Mes gauname mažai pranešimą, skaitymas simboliai iš buggy1, padaryta. 154 00:07:30,182 --> 00:07:32,390 Visa tai reiškia, tai ištraukti kartu visų kodą, 155 00:07:32,390 --> 00:07:35,570 ir dabar jis buvo pakrautas į GDB, ir jis yra pasirengęs eiti. 156 00:07:35,570 --> 00:07:37,140 >> Dabar, ką noriu daryti? 157 00:07:37,140 --> 00:07:39,130 Ar prisimenate ką Pirmasis žingsnis paprastai yra 158 00:07:39,130 --> 00:07:42,540 Po Aš viduje šioje aplinkoje? 159 00:07:42,540 --> 00:07:44,540 Tikimės, kad Jūs sakėte, nustatyti pertrauka taškas, nes 160 00:07:44,540 --> 00:07:46,240 Iš tikrųjų tai, ką noriu daryti. 161 00:07:46,240 --> 00:07:47,990 Dabar aš neturite kodo tai 162 00:07:47,990 --> 00:07:50,948 priešais mane, kuris yra tikriausiai nėra tipiškas naudojimo atveju, beje. 163 00:07:50,948 --> 00:07:52,055 Jūs tikriausiai. 164 00:07:52,055 --> 00:07:52,680 Taigi, kad gerai. 165 00:07:52,680 --> 00:07:55,790 Bet jei jūs neturite, kas viena funkcija, kad žinote, 166 00:07:55,790 --> 00:07:58,880 egzistuoja kiekvieno C programa? 167 00:07:58,880 --> 00:08:04,420 Nesvarbu, kaip didelis ar kaip sudėtinga tai, ši funkcija tikrai egzistuoja. 168 00:08:04,420 --> 00:08:05,440 Pagrindinė, tiesa? 169 00:08:05,440 --> 00:08:08,870 >> Taigi jei visa kita, mes galime nustatyti pertraukos tašką pagrindinis. 170 00:08:08,870 --> 00:08:12,200 Ir vėl, galėčiau tiesiog įveskite pertrauka pagrindinis, vietoj to, b. 171 00:08:12,200 --> 00:08:14,650 Ir jei įdomu, jei jūs nors tipo iš ilgą komandą 172 00:08:14,650 --> 00:08:16,800 ir tada suprasite, kad jums įvedėte neteisingą dalyką, 173 00:08:16,800 --> 00:08:18,770 ir norite atsikratyti Visų kaip aš ką tik padariau, 174 00:08:18,770 --> 00:08:22,029 galite Imkis U, kuris bus ištrinti viską ir atneš jums atgal 175 00:08:22,029 --> 00:08:23,570 su žymeklio linijų pradžioje. 176 00:08:23,570 --> 00:08:26,569 Daug greičiau nei tiesiog laikykite nuspaudę ištrinti ar pataikyti krūva kartus 177 00:08:26,569 --> 00:08:27,080 daugiau. 178 00:08:27,080 --> 00:08:28,740 >> Taigi, mes nustatysime pertraukos tašką pagrindinis. 179 00:08:28,740 --> 00:08:32,970 Ir, kaip matote, ji sako, mes nustatyti pertraukos tašką failo buggy1.c, 180 00:08:32,970 --> 00:08:36,330 ir, matyt, pirmoji eilutė kodo pagrindinių yra linija septyni. 181 00:08:36,330 --> 00:08:38,080 Kartą, mes neturi šaltinio failas čia 182 00:08:38,080 --> 00:08:40,429 bet aš manyti, kad tai pasakojo tiesą. 183 00:08:40,429 --> 00:08:44,510 Ir tada, aš tiesiog bando ir paleisti programą, r. 184 00:08:44,510 --> 00:08:45,360 Pradedant programą. 185 00:08:45,360 --> 00:08:48,160 Visos teisės, todėl šis pranešimas yra šiek tiek paslaptingas. 186 00:08:48,160 --> 00:08:50,160 Tačiau iš esmės tai, kas vyksta čia yra tai tik 187 00:08:50,160 --> 00:08:53,350 pasakojo, aš nukentėjo mano pertraukos taškas, pertrauka punkto numeris 1. 188 00:08:53,350 --> 00:08:55,877 >> Ir tada, kad kodo eilutę, Nėra tokio failo ar katalogo. 189 00:08:55,877 --> 00:08:57,710 Vienintelė priežastis, dėl kurios Matau, kad pranešimą 190 00:08:57,710 --> 00:09:00,800 nes aš netyčia ištrinti savo buggy.c failą. 191 00:09:00,800 --> 00:09:04,050 Jei mano buggy1.c failas egzistavo dabartiniame kataloge 192 00:09:04,050 --> 00:09:06,920 kad linijos tiesiai ten iš tikrųjų pasakykite man, ką kodo eilutę 193 00:09:06,920 --> 00:09:08,214 tiesiog skaito. 194 00:09:08,214 --> 00:09:09,380 Deja, aš ištrynė jį. 195 00:09:09,380 --> 00:09:14,790 Mes ketiname turite rūšies navigate per tai šiek tiek daugiau aklai. 196 00:09:14,790 --> 00:09:17,330 >> Gerai, kad pažiūrėkime, ką aš noriu padaryti čia? 197 00:09:17,330 --> 00:09:21,770 Na, aš norėčiau žinoti, ką vietos kintamieji gal galima man. 198 00:09:21,770 --> 00:09:23,570 Aš pradėjau savo programą. 199 00:09:23,570 --> 00:09:28,515 Pažiūrėkime, kas gali būti jau inicializuoti už mus. 200 00:09:28,515 --> 00:09:31,430 I tipo Info vietiniai, ne vietiniai. 201 00:09:31,430 --> 00:09:33,960 Gerai, taip, kad nėra duok man informacijos toną. 202 00:09:33,960 --> 00:09:37,600 Galėčiau pabandyti ir atsispausdinti kintamąjį, bet aš nežinau jokių kintamųjų vardai. 203 00:09:37,600 --> 00:09:39,930 Galėčiau pabandyti atgal pėdsakų, bet aš viduje pagrindinis, 204 00:09:39,930 --> 00:09:43,710 todėl aš žinau, aš nepadariau kita skambinimo funkcijos dabar. 205 00:09:43,710 --> 00:09:47,710 >> Taigi atrodo, kad mano vienintelis pasirinkimas yra naudoti n ar taip ir pradėti pasinerti. 206 00:09:47,710 --> 00:09:49,630 Aš ruošiuosi naudoti n. 207 00:09:49,630 --> 00:09:51,180 Taigi aš Type n. 208 00:09:51,180 --> 00:09:53,060 Oh my GOSH, kas vyksta čia. 209 00:09:53,060 --> 00:09:56,260 Programa gavo signalus, SIGSEGV segmentavimo kaltės, 210 00:09:56,260 --> 00:09:57,880 ir tada visa krūva daiktų. 211 00:09:57,880 --> 00:09:58,880 Aš jau priblokšti. 212 00:09:58,880 --> 00:10:00,980 Na, ten tikrai daug reikia išmokti čia. 213 00:10:00,980 --> 00:10:02,520 Taigi, ką mums tai sako? 214 00:10:02,520 --> 00:10:09,180 Ką tai mums sako, yra, ši programa yra apie, bet vis dar nėra, SEG kaltė. 215 00:10:09,180 --> 00:10:12,550 Ir visų pirma, aš ruošiuosi priartinti dar čia 216 00:10:12,550 --> 00:10:18,980 tai yra apie SEG gedimą apie kažkas vadinamas strcmp. 217 00:10:18,980 --> 00:10:22,705 >> Dabar, mes negali būti svarstomas Ši funkcija plačiai. 218 00:10:22,705 --> 00:10:25,580 Bet tai is--, nes mes neketiname kalbėti apie kiekvieną funkciją, kuri 219 00:10:25,580 --> 00:10:28,610 egzistuoja C standarto library-- bet jie visi prieinami jums, 220 00:10:28,610 --> 00:10:32,110 ypač jei vartojate pažvelgti reference.cs50.net. 221 00:10:32,110 --> 00:10:35,000 Ir strcmp yra tikrai galingas funkcija, kuri egzistuoja viduje 222 00:10:35,000 --> 00:10:38,070 iš string.h antraštės failas, kuris yra galva 223 00:10:38,070 --> 00:10:41,970 failas, kuris yra skirtas funkcijas kad darbas su ir manipuliuoti eilutes. 224 00:10:41,970 --> 00:10:49,830 >> Ir visų pirma, ką daro, yra strcmp ji lygina dviejų stygos reikšmes. 225 00:10:49,830 --> 00:10:54,160 Taigi aš apie segmentavimo kaltės ant kvietimą strcmp atrodo. 226 00:10:54,160 --> 00:10:58,530 I hit n, o iš tiesų gaunu pranešimą, Programa baigiama signalo SIGSEGV 227 00:10:58,530 --> 00:11:01,370 segmentavimo kaltės. Taigi dabar Aš iš tikrųjų jau SEG yda, 228 00:11:01,370 --> 00:11:06,479 ir mano programa yra gana daug veiksmingiau atsisakė. 229 00:11:06,479 --> 00:11:07,770 Tai yra programos pabaigoje. 230 00:11:07,770 --> 00:11:10,370 Jis sugedo, tai sudužo. 231 00:11:10,370 --> 00:11:14,740 Taigi nebuvo daug, bet aš iš tikrųjų sužinoti gana didelis 232 00:11:14,740 --> 00:11:16,747 iš šio mažai patirties. 233 00:11:16,747 --> 00:11:17,580 Ką aš sužinojau? 234 00:11:17,580 --> 00:11:22,020 Na, mano programa sugenda gana daug iš karto. 235 00:11:22,020 --> 00:11:26,300 Mano programa sugenda nuo kvietimas strcmp, bet aš 236 00:11:26,300 --> 00:11:30,560 neturiu jokių vietinių kintamųjų Mano programa tuo metu, kai ji sugenda. 237 00:11:30,560 --> 00:11:37,320 Taigi, kas seka, arba įsipareigojimų, galėčiau galbūt būtų palyginti. 238 00:11:37,320 --> 00:11:42,140 Jei aš neturiu bet vietos kintamieji, jums gali 239 00:11:42,140 --> 00:11:45,520 spėti, kad aš ten have-- gal yra pasaulio kintamasis, kuris galėtų būti tiesa. 240 00:11:45,520 --> 00:11:47,670 >> Bet apskritai, atrodo, kaip aš lyginant 241 00:11:47,670 --> 00:11:52,070 į kažką, kad neegzistuoja. 242 00:11:52,070 --> 00:11:54,130 Taigi leiskite išsiaiškinti kad šiek tiek toliau. 243 00:11:54,130 --> 00:11:55,120 Taigi, aš ruošiuosi išvalyti ekraną. 244 00:11:55,120 --> 00:11:57,536 Aš ruošiuosi mesti iš GDB aplinka sekundę. 245 00:11:57,536 --> 00:12:01,300 Ir aš galvoju, Gerai, kad ten nėra vietos kintamieji mano programa. 246 00:12:01,300 --> 00:12:06,444 Įdomu, jei gal aš turėjo praeiti string'e kaip komandinės eilutės argumentas. 247 00:12:06,444 --> 00:12:07,610 Taigi tegul tiesiog išbandyti tai iš. 248 00:12:07,610 --> 00:12:09,020 Aš to dar nepadarėte anksčiau. 249 00:12:09,020 --> 00:12:14,244 >> Leiskite pamatyti, jei gal jei aš paleisti šią programą su komandinės eilutės argumentas ji veikia. 250 00:12:14,244 --> 00:12:16,140 Huh, ne segmentavimo kaltės nėra. 251 00:12:16,140 --> 00:12:17,870 Jis tiesiog pasakė man, kad aš raštuotas jį. 252 00:12:17,870 --> 00:12:19,170 Taigi gal tai pataisymas čia. 253 00:12:19,170 --> 00:12:27,560 Ir iš tiesų, jei aš einu atgal ir pažvelgti į tikrasis šaltinis kodas buggy1.c, 254 00:12:27,560 --> 00:12:31,180 atrodo taip, tarsi ką darau yra Aš skambindami į strcmp be 255 00:12:31,180 --> 00:12:34,010 patikrinti, ar iš tikrųjų argv [1] egzistuoja. 256 00:12:34,010 --> 00:12:36,730 Tai iš tikrųjų šaltinis kodas buggy1.c. 257 00:12:36,730 --> 00:12:38,855 Taigi, ką aš tikrai reikia padaryti čia norėdami nustatyti mano programa, 258 00:12:38,855 --> 00:12:40,835 darant prielaidą, kad aš turėti byla prieš mane, yra 259 00:12:40,835 --> 00:12:44,740 tiesiog pridėti patikrinkite, Įsitikinkite, kad argc yra lygus 2. 260 00:12:44,740 --> 00:12:47,780 Taigi šis pavyzdys, vėl, kaip jau sakiau, yra šiek tiek nenatūralu, tiesa? 261 00:12:47,780 --> 00:12:49,840 Jūs paprastai nesiruošia netyčia ištrinti savo kodą 262 00:12:49,840 --> 00:12:51,820 ir tada jau bandyti ir derinti programą. 263 00:12:51,820 --> 00:12:53,120 Bet tikiuosi, jis davė Jūs iliustracija 264 00:12:53,120 --> 00:12:55,120 iš rūšių dalykų, kad jums gali būti galvoja apie 265 00:12:55,120 --> 00:12:56,610 kaip jūs derinti savo programą. 266 00:12:56,610 --> 00:12:58,760 >> Kokia reikalus čia valstybė? 267 00:12:58,760 --> 00:13:00,510 Kokie kintamieji padaryti I turi prieinama su manimi? 268 00:13:00,510 --> 00:13:03,600 Kur tiksliai yra mano programa kritimo, kokiu linija, 269 00:13:03,600 --> 00:13:05,240 ką kvietimas kokią funkciją? 270 00:13:05,240 --> 00:13:06,952 Kokios įkalčiais ar tai duos man? 271 00:13:06,952 --> 00:13:08,910 Ir tai tiksliai rūšies mąstyseną, kad jus 272 00:13:08,910 --> 00:13:12,820 Reikėtų patekti į kai esate galvoju apie derinti savo programas. 273 00:13:12,820 --> 00:13:13,820 >> Aš Doug Lloyd. 274 00:13:13,820 --> 00:13:16,140 Tai CS50. 275 00:13:16,140 --> 00:15:08,642