1 00:00:00,000 --> 00:00:05,640 2 00:00:05,640 --> 00:00:06,830 >> DOUG LLOYD: Olgu GDB. 3 00:00:06,830 --> 00:00:08,480 Mis see on täpselt? 4 00:00:08,480 --> 00:00:11,310 Nii GDB, mis tähistab GNU siluri, 5 00:00:11,310 --> 00:00:15,040 on tõesti fantastiline vahend, et saame kasutada, et aidata meil siluda meie programmid, 6 00:00:15,040 --> 00:00:18,210 või teada, kus asjad on valesti meie programme. 7 00:00:18,210 --> 00:00:22,590 GDB on hämmastavalt võimas, kuid väljund ja temaga tegemist 8 00:00:22,590 --> 00:00:23,830 võib olla natuke segasena. 9 00:00:23,830 --> 00:00:28,210 See on tavaliselt käsurea vahend, ja see ei viska palju sõnumeid sind. 10 00:00:28,210 --> 00:00:31,144 Ja see võib mingi raske sõeluda täpselt, mis toimub. 11 00:00:31,144 --> 00:00:33,560 Õnneks oleme astunud samme probleemi lahendada sinu jaoks 12 00:00:33,560 --> 00:00:36,281 nagu te tööd läbi CS50. 13 00:00:36,281 --> 00:00:39,030 Kui te ei kasuta graafilise siluri, mis kolleeg Dan 14 00:00:39,030 --> 00:00:41,570 Armandarse on rääkinud üsna natuke on video, mis 15 00:00:41,570 --> 00:00:44,740 peaks olema siin kohe, peate 16 00:00:44,740 --> 00:00:48,270 kasutada neid käsurea tööriistad töötada GDB. 17 00:00:48,270 --> 00:00:51,250 Kui oled töötanud CS50 IDE, sa ei pea seda tegema. 18 00:00:51,250 --> 00:00:53,550 Aga kui sa ei ole töötab CS50 IDE, 19 00:00:53,550 --> 00:00:55,750 ehk kasutades versioon on CS50 Appliance, 20 00:00:55,750 --> 00:00:58,860 või teise Linux operatsioonisüsteemi süsteemi GDB installitud, 21 00:00:58,860 --> 00:01:00,980 peate kasutama Nende käsurea tööriistu. 22 00:01:00,980 --> 00:01:02,860 >> Ja kuna te võite pead tegema, et see on 23 00:01:02,860 --> 00:01:06,280 kasulik lihtsalt mõista, kuidas GDB töötab käsurealt. 24 00:01:06,280 --> 00:01:09,650 Aga jälle, kui sa oled abil CS50 IDE, siis 25 00:01:09,650 --> 00:01:15,400 võib kasutada graafilist siluri mis on ehitatud IDE. 26 00:01:15,400 --> 00:01:18,750 Nii et asjad lähevad koos GDB, et alustada silumine 27 00:01:18,750 --> 00:01:21,220 Meetod konkreetse Programm on kõik, mida vaja teha 28 00:01:21,220 --> 00:01:23,810 on kirjutada GDB järgneb programmi nimi. 29 00:01:23,810 --> 00:01:28,620 Nii näiteks, kui teie programm on hello, siis oleks tüüp GDB tere. 30 00:01:28,620 --> 00:01:31,210 >> Kui sa seda teha, sa lähed tõmba GDB keskkond. 31 00:01:31,210 --> 00:01:33,800 Teie kiiret muutub, ja selle asemel, et see, mida ta tavaliselt 32 00:01:33,800 --> 00:01:35,841 on see, kui sa kirjutad asju käsul LINE ls, 33 00:01:35,841 --> 00:01:38,115 cd-- kõik oma tüüpiline Linuxi käsud, oma kiire 34 00:01:38,115 --> 00:01:42,200 muutub, arvatavasti midagi nagu sulgudes GDB sulgudes. 35 00:01:42,200 --> 00:01:46,630 See on endale GDB kiire, sest sa oled sees GDB keskkond. 36 00:01:46,630 --> 00:01:49,830 Kui oled selle keskkonna, seal on kaks suurt käske 37 00:01:49,830 --> 00:01:52,290 et sa ilmselt kasutada järgmises järjekorras. 38 00:01:52,290 --> 00:01:55,200 >> Esimene on b, mille on lühike paus. 39 00:01:55,200 --> 00:01:58,690 Ja pärast seda, kui B-tüüpi, siis tavaliselt kirjuta nimi funktsioon, 40 00:01:58,690 --> 00:02:01,040 või kui juhtub, et tean ümber, mida line number 41 00:02:01,040 --> 00:02:04,100 Teie programm algab käituda natuke imelik, 42 00:02:04,100 --> 00:02:06,370 saab kirjutada rida number ka seal. 43 00:02:06,370 --> 00:02:09,660 Mis b, või pausi, ei see võimaldab oma programmi 44 00:02:09,660 --> 00:02:13,270 joosta, kuni teatud punkti, nimelt funktsiooni nimi 45 00:02:13,270 --> 00:02:15,880 mida te määrate või line teie määratud numbrile. 46 00:02:15,880 --> 00:02:18,590 >> Ja sel hetkel, see külmutada täitmist. 47 00:02:18,590 --> 00:02:21,670 See on tõesti hea, sest kui täitmine on külmutatud, 48 00:02:21,670 --> 00:02:25,214 võite alustada väga aeglaselt sammult läbi oma programmi. 49 00:02:25,214 --> 00:02:28,130 Tavaliselt, kui olete käinud Sinu programmid, nad on üsna lühike. 50 00:02:28,130 --> 00:02:31,250 Tavaliselt kirjutad dot kaldkriipsuga iganes nime oma programmi, Enter, 51 00:02:31,250 --> 00:02:33,470 ja enne kui sa saad vilkuma, oma Programm on juba valmis. 52 00:02:33,470 --> 00:02:36,620 See ei ole tõesti palju aega, et proovida ja aru saada, mis on valesti. 53 00:02:36,620 --> 00:02:40,920 Nii see tõesti olla võimelised aeglustada asju Seades murdepunkt, kus b, 54 00:02:40,920 --> 00:02:43,040 ja siis astuvad. 55 00:02:43,040 --> 00:02:46,169 >> Siis kui olete loonud oma vaheaega punkti, saate käivitada programmi. 56 00:02:46,169 --> 00:02:47,960 Ja kui teil on käsurea argumente, 57 00:02:47,960 --> 00:02:51,610 sa täpsustada neid siin, mitte siis, kui kirjutad GDB oma programmi nimi. 58 00:02:51,610 --> 00:02:55,980 Sa täpsustada kõiki käsureal argumente, võttes r või joosta, 59 00:02:55,980 --> 00:03:00,270 ja siis mis iganes käsurea argumente sa pead sees oma programmi. 60 00:03:00,270 --> 00:03:03,510 On mitmeid teisi tegelikult oluline ja kasulik käske 61 00:03:03,510 --> 00:03:04,970 sees SKP keskkond. 62 00:03:04,970 --> 00:03:07,540 Lubage mul kiiresti minna üle mõned neist. 63 00:03:07,540 --> 00:03:11,320 >> Esimene on n, mis on lühikese järgmisel, ja saate tippida järgmine asemel n, 64 00:03:11,320 --> 00:03:12,304 nii teeks. 65 00:03:12,304 --> 00:03:13,470 Ja see on lihtsalt stenografist. 66 00:03:13,470 --> 00:03:17,540 Ja kui olete ilmselt juba saanud kasutatakse, on võimelised kirjutama asju 67 00:03:17,540 --> 00:03:20,520 lühem on üldiselt parem. 68 00:03:20,520 --> 00:03:24,100 Ja mida ta teeb on see saab samm edasi ühe ploki koodi. 69 00:03:24,100 --> 00:03:26,170 Nii saad edasi kuni funktsioon kõne. 70 00:03:26,170 --> 00:03:28,350 Ja siis selle asemel, et sukeldudes et funktsiooni 71 00:03:28,350 --> 00:03:33,130 ja läbimas kõik selle funktsioonid kood, see lihtsalt on funktsioon. 72 00:03:33,130 --> 00:03:34,400 >> Funktsioon kutsutakse. 73 00:03:34,400 --> 00:03:35,733 See teeb kõik oma töö. 74 00:03:35,733 --> 00:03:38,870 Ta tagastab väärtuse funktsioon, mis nõudis ta. 75 00:03:38,870 --> 00:03:42,490 Ja siis saate liikuda edasi Järgmine rida, et helistaja funktsiooni. 76 00:03:42,490 --> 00:03:44,555 Kui soovite astuda sees funktsiooni, 77 00:03:44,555 --> 00:03:46,430 selle asemel, et lihtsalt võttes see täita, eriti 78 00:03:46,430 --> 00:03:50,004 Kui te arvate, et probleem võib valetada sees, et funktsiooni, 79 00:03:50,004 --> 00:03:52,670 võid muidugi seada murda punkti sees, et funktsioon. 80 00:03:52,670 --> 00:03:57,820 Või kui sa oled juba töötab, võite Kasutage S samm edasi üks rida koodi. 81 00:03:57,820 --> 00:04:01,170 >> Nii et see on samm ja sukelduda funktsioone, 82 00:04:01,170 --> 00:04:04,750 selle asemel, et lihtsalt on täita ja jätkuvalt edasi funktsiooni 83 00:04:04,750 --> 00:04:07,380 et sa oled silumiseks. 84 00:04:07,380 --> 00:04:09,870 Kui sa kunagi tahad teada väärtus muutuja, 85 00:04:09,870 --> 00:04:12,507 saate tippida p või Print, ja siis muutuja nimi. 86 00:04:12,507 --> 00:04:15,090 Ja mis välja printida teile, sisemusse GDB keskkonna 87 00:04:15,090 --> 00:04:19,110 nimi muutuja, mis sina-- vabandust mind-- väärtus muutuja 88 00:04:19,110 --> 00:04:20,064 et olete nime. 89 00:04:20,064 --> 00:04:23,230 Kui sa tahad teada, väärtused iga kohaliku muutuja kättesaadava kust 90 00:04:23,230 --> 00:04:25,970 sa praegu oled oma Programmi saab kirjutada info kohalikega. 91 00:04:25,970 --> 00:04:28,332 See on palju kiirem kui kirjutades p ja siis mis iganes, 92 00:04:28,332 --> 00:04:30,540 loetletakse välja kõik muutujaid, et sa tead olemas. 93 00:04:30,540 --> 00:04:34,370 Sa võid kirjutada info kohalikega, ja see saab välja printida kõike teile. 94 00:04:34,370 --> 00:04:37,770 Järgmisena on bt, mis on lühike Tagasi Trace. 95 00:04:37,770 --> 00:04:41,680 Nüüd üldiselt Eriti alguses CS50, 96 00:04:41,680 --> 00:04:44,450 sa ei tõesti kord kasutada BT või Back Trace, 97 00:04:44,450 --> 00:04:47,860 sest sa ei ole võttes funktsioonid et helistada muid funktsioone. 98 00:04:47,860 --> 00:04:50,450 >> Sul võib olla peamiseks üksikpakkumist funktsioon, kuid see on ilmselt see. 99 00:04:50,450 --> 00:04:53,199 Sa ei pea, et muud ülesanded kutsudes teise funktsiooni, mis 100 00:04:53,199 --> 00:04:54,880 nõuab teise funktsiooni, ja nii edasi. 101 00:04:54,880 --> 00:04:57,550 Aga kui oma programmides rohkem Keerulise ja eriti 102 00:04:57,550 --> 00:05:00,290 kui töö alustamist rekurrentselt, tagasi jälgi 103 00:05:00,290 --> 00:05:05,150 võib tõesti kasulik viis teile Selline saaksin olukorra tausta 104 00:05:05,150 --> 00:05:06,460 Ma olen oma programmi. 105 00:05:06,460 --> 00:05:10,590 Nii öelda olete kirjutanud oma kood, ja sa tead, et peamine nõuab funktsiooni 106 00:05:10,590 --> 00:05:14,720 f, mis nõuab funktsiooni g, mis nõuab funktsiooni h. 107 00:05:14,720 --> 00:05:17,650 Nii et meil on mitu kihti pesitsevate siin toimub. 108 00:05:17,650 --> 00:05:19,440 >> Kui oled sees Sinu GDB keskkond 109 00:05:19,440 --> 00:05:21,640 ja sa tead oma sees h, kuid te unustate 110 00:05:21,640 --> 00:05:27,210 mida on sulle, kus sa are-- saate tippida bt või tagasi jälje, 111 00:05:27,210 --> 00:05:32,370 ja siis välja printida h, g, f peamine, koos mõne muu teave, mida 112 00:05:32,370 --> 00:05:35,984 annab teile aimugi, et OK peamine nimetatakse f, f nimetatakse g, g nimetatakse h, 113 00:05:35,984 --> 00:05:37,900 ja see, kus ma Praegu olen oma programmi. 114 00:05:37,900 --> 00:05:41,380 Nii et see võib olla väga kasulik, eriti kui segasena-likkust GDB 115 00:05:41,380 --> 00:05:45,667 muutub veidi valdav, et täpselt teada, kus asjad on. 116 00:05:45,667 --> 00:05:48,500 Lõpuks, kui teie programm on teinud, või kui oled valmis silumine see 117 00:05:48,500 --> 00:05:50,125 ja sa tahad sammu kaugusel alates GDB keskkond 118 00:05:50,125 --> 00:05:51,940 see aitab teada, kuidas saada välja. 119 00:05:51,940 --> 00:05:55,500 Sa võid kirjutada q või Lõpeta, et saada välja. 120 00:05:55,500 --> 00:05:59,220 Nüüd, enne tänast video Olen valmis lollakas programmi 121 00:05:59,220 --> 00:06:03,900 nimetatakse buggy1, mida ma koostatud failist tuntud buggy1.c. 122 00:06:03,900 --> 00:06:06,500 Nagu te võite arvata, see Programm on tegelikult lollakas. 123 00:06:06,500 --> 00:06:08,990 Midagi läheb valesti kui ma üritan ja käivitada. 124 00:06:08,990 --> 00:06:13,014 Nüüd kahjuks ma kogemata kustutada minu buggy1.c faili 125 00:06:13,014 --> 00:06:15,930 nii et minu jaoks välja nuputada mis toimub vale selle programmiga, 126 00:06:15,930 --> 00:06:18,770 Ma pean kasutama GDB mingi pimesi, püüdes 127 00:06:18,770 --> 00:06:22,372 liikuda selle programmi nuputada, millised täpselt on valesti. 128 00:06:22,372 --> 00:06:24,580 Aga kasutades ainult tööriistad me oleme juba õppinud, 129 00:06:24,580 --> 00:06:27,700 saame päris palju näitaja täpselt, mis see on. 130 00:06:27,700 --> 00:06:30,740 Nii saab pea üle CS50 IDE ja tutvuda. 131 00:06:30,740 --> 00:06:33,155 OK, nii et me oleme siin minu CS50 IDE keskkonnas, 132 00:06:33,155 --> 00:06:35,697 ja ma suumida natuke nii näed natuke rohkem. 133 00:06:35,697 --> 00:06:38,530 Minu terminali aken, kui ma nimekirja sisu minu praegune direktor 134 00:06:38,530 --> 00:06:41,250 LS, näeme, et ma on paar allikas faile 135 00:06:41,250 --> 00:06:44,982 Siit võivad sealhulgas varem arutatud buggy1. 136 00:06:44,982 --> 00:06:46,940 Mis täpselt läheb, kui Püüan ja käivitada buggy1. 137 00:06:46,940 --> 00:06:47,773 Noh olgem teada. 138 00:06:47,773 --> 00:06:52,510 Ma dot kaldkriipsuga lollakas, ja ma Enter. 139 00:06:52,510 --> 00:06:53,670 >> Segmenteerimine vigu. 140 00:06:53,670 --> 00:06:55,000 See ei ole hea. 141 00:06:55,000 --> 00:06:57,180 Kui te mäletate, et killustatust süü tavaliselt 142 00:06:57,180 --> 00:07:01,540 tekib siis, kui me Access Memory et me ei tohi puudutada. 143 00:07:01,540 --> 00:07:03,820 Me oleme kuidagi jõudnud väljaspool piire 144 00:07:03,820 --> 00:07:05,995 mida Programmi tõlkija, on meile andnud. 145 00:07:05,995 --> 00:07:08,310 Ja nii juba, et on aimugi, et hoida tööriistakasti 146 00:07:08,310 --> 00:07:10,660 kui me hakkame silumine protsessi. 147 00:07:10,660 --> 00:07:13,620 Midagi on läinud natuke valesti. 148 00:07:13,620 --> 00:07:15,935 >> Olgu, nii alustame üles GDB keskkond 149 00:07:15,935 --> 00:07:19,030 ja vaata, kas saame nuputada Mis täpselt probleem on. 150 00:07:19,030 --> 00:07:21,674 Ma kustutan oma ekraanil, ja ma lähen kirjuta GDB 151 00:07:21,674 --> 00:07:24,340 uuesti siseneda GDB keskkond ja programmi nimi 152 00:07:24,340 --> 00:07:27,450 et ma tahan siluda, buggy1. 153 00:07:27,450 --> 00:07:30,182 Me natuke sõnumi lugemine sümboleid buggy1, tehtud. 154 00:07:30,182 --> 00:07:32,390 Kõik see tähendab, et tõmbas koos kõigi kood, 155 00:07:32,390 --> 00:07:35,570 ja nüüd on see laaditud GDB, ja see on valmis minema. 156 00:07:35,570 --> 00:07:37,140 >> Nüüd, mida ma tahan teha? 157 00:07:37,140 --> 00:07:39,130 Kas te mäletate, milline Esimene samm on tavaliselt 158 00:07:39,130 --> 00:07:42,540 kui ma olen sees selles keskkonnas? 159 00:07:42,540 --> 00:07:44,540 Loodetavasti sa ütlesid seatud murdepunkt, sest 160 00:07:44,540 --> 00:07:46,240 Tegelikult see on see, mida ma tahan teha. 161 00:07:46,240 --> 00:07:47,990 Nüüd ma ei ole lähtekoodi seda 162 00:07:47,990 --> 00:07:50,948 minu ees, mis on ilmselt ei tüüpiline kasutamise puhul, muide. 163 00:07:50,948 --> 00:07:52,055 Sa ilmselt. 164 00:07:52,055 --> 00:07:52,680 Nii see on hea. 165 00:07:52,680 --> 00:07:55,790 Aga eeldades, et sa seda ei tee, mis on üks funktsioon, et sa tead 166 00:07:55,790 --> 00:07:58,880 eksisteerib iga C programmi? 167 00:07:58,880 --> 00:08:04,420 Ükskõik kui suur või kui keeruline see on, seda funktsiooni kindlasti olemas. 168 00:08:04,420 --> 00:08:05,440 Main, eks? 169 00:08:05,440 --> 00:08:08,870 >> Nii ei suuda kõik muu, saame määrata murdepunkti on peamine. 170 00:08:08,870 --> 00:08:12,200 Ja jälle, ma ei kirjuta murda peamised asemel b. 171 00:08:12,200 --> 00:08:14,650 Ja kui sa oled uudishimulik, kui te kunagi kirjuta välja pikk käsk 172 00:08:14,650 --> 00:08:16,800 ja siis mõistad, et sa tipitud vale asi, 173 00:08:16,800 --> 00:08:18,770 ja sa tahad lahti saada kõik nagu ma just tegin, 174 00:08:18,770 --> 00:08:22,029 saab võtta kontrolli U, mis kustutada kõike ja viib teid tagasi 175 00:08:22,029 --> 00:08:23,570 algusega kursori read. 176 00:08:23,570 --> 00:08:26,569 Palju kiiremini kui lihtsalt hoia kustutada või lööb see kamp korda 177 00:08:26,569 --> 00:08:27,080 üle. 178 00:08:27,080 --> 00:08:28,740 >> Nii me määrata murdepunkti on peamine. 179 00:08:28,740 --> 00:08:32,970 Ja nagu näete, see ütleb me oleme määrata murdepunkti kell faili buggy1.c, 180 00:08:32,970 --> 00:08:36,330 ja ilmselt esimene rida koodi peamised on line seitse. 181 00:08:36,330 --> 00:08:38,080 Jällegi, me ei ole lähtefaili siin 182 00:08:38,080 --> 00:08:40,429 aga ma eeldada, et see on räägib mulle tõtt. 183 00:08:40,429 --> 00:08:44,510 Ja siis ma üritan ja käivitage programm, r. 184 00:08:44,510 --> 00:08:45,360 Alates programmi. 185 00:08:45,360 --> 00:08:48,160 Olgu, nii et see sõnum on veidi segasena. 186 00:08:48,160 --> 00:08:50,160 Aga põhimõtteliselt mida on siin toimub on see lihtsalt 187 00:08:50,160 --> 00:08:53,350 mulle öelda, ma olen tabanud minu murda punkti, numbriga 1. 188 00:08:53,350 --> 00:08:55,877 >> Ja siis, et rida koodi, no sellist faili või kataloogi. 189 00:08:55,877 --> 00:08:57,710 Ainus põhjus, mis Ma näen, et sõnum 190 00:08:57,710 --> 00:09:00,800 on, sest ma kogemata kustutada minu buggy.c faili. 191 00:09:00,800 --> 00:09:04,050 Kui minu buggy1.c fail olemas aktiivses kataloogis, 192 00:09:04,050 --> 00:09:06,920 et joon seal tegelikult öelge mulle, mida koodirida 193 00:09:06,920 --> 00:09:08,214 sõnalt loeb. 194 00:09:08,214 --> 00:09:09,380 Kahjuks ma kustutasin selle. 195 00:09:09,380 --> 00:09:14,790 Me läheme pea sellist navigate läbi selle natuke rohkem pimesi. 196 00:09:14,790 --> 00:09:17,330 >> OK, nii et vaatame, mida ma tahan teha siin? 197 00:09:17,330 --> 00:09:21,770 Noh, ma tahaks teada, mida kohalikud muutujad võibolla on minule. 198 00:09:21,770 --> 00:09:23,570 Olen hakanud oma programmi. 199 00:09:23,570 --> 00:09:28,515 Vaatame, mis võib olla juba vormindatud meile. 200 00:09:28,515 --> 00:09:31,430 I tüüpi Info kohalikega, no kohalikega. 201 00:09:31,430 --> 00:09:33,960 Olgu, nii et ei ole mulle ton teabe. 202 00:09:33,960 --> 00:09:37,600 Ma võiks proovida ja välja printida muutuja, aga ma ei tea, mis tahes muutuja nime. 203 00:09:37,600 --> 00:09:39,930 Ma võiks proovida uuesti jälgi, aga ma olen sees peamine, 204 00:09:39,930 --> 00:09:43,710 nii et ma tean, et ma ei ole teinud teine ​​funktsioon kõne just nüüd. 205 00:09:43,710 --> 00:09:47,710 >> Nii näeb välja nagu mu ainus valikud kasutada n või nii ja alustada sukelduda. 206 00:09:47,710 --> 00:09:49,630 Ma lähen kasutada n. 207 00:09:49,630 --> 00:09:51,180 Nii I tüüpi n. 208 00:09:51,180 --> 00:09:53,060 Oh heldust, mis toimub siin. 209 00:09:53,060 --> 00:09:56,260 Programm sai signaale, SIGSEGV killustatust süü, 210 00:09:56,260 --> 00:09:57,880 ja siis terve hunnik kraami. 211 00:09:57,880 --> 00:09:58,880 Ma olen juba ülekoormatud. 212 00:09:58,880 --> 00:10:00,980 Noh, seal on tegelikult palju õppida siin. 213 00:10:00,980 --> 00:10:02,520 Mida see meile ütleb? 214 00:10:02,520 --> 00:10:09,180 Mida see ütleb meile on see programm on umbes, kuid ei ole veel, seg süü. 215 00:10:09,180 --> 00:10:12,550 Ja eriti, ma lähen et suurendada veelgi siin 216 00:10:12,550 --> 00:10:18,980 see on umbes SEG süü kohta midagi, mida nimetatakse strcmp. 217 00:10:18,980 --> 00:10:22,705 >> Nüüd ei arutanud Selle funktsiooni ulatuslikult. 218 00:10:22,705 --> 00:10:25,580 Aga see on-- sest me ei kavatse rääkida iga funktsiooni, mis 219 00:10:25,580 --> 00:10:28,610 eksisteerib C standard library-- kuid nad kõik teile kättesaadavad, 220 00:10:28,610 --> 00:10:32,110 eriti kui te võtate vaata reference.cs50.net. 221 00:10:32,110 --> 00:10:35,000 Ja strcmp on tõesti võimas funktsioon, mis eksisteerib sees 222 00:10:35,000 --> 00:10:38,070 on string päise kaudu faili, mis on päise kaudu 223 00:10:38,070 --> 00:10:41,970 fail, mis on pühendatud funktsioonid et töö ja manipuleerida stringid. 224 00:10:41,970 --> 00:10:49,830 >> Ja eriti, mida strcmp teeb, on võrreldakse väärtustega kaks stringi. 225 00:10:49,830 --> 00:10:54,160 Nii et ma olen umbes killustatust süü kohta kõne strcmp tundub. 226 00:10:54,160 --> 00:10:58,530 I hit n, ja tegelikult saan teate, Programm lõpeb signaali SIGSEGV 227 00:10:58,530 --> 00:11:01,370 killustatust süü. Nüüd Ma tegelikult ei seg faulted, 228 00:11:01,370 --> 00:11:06,479 ja minu programm on päris palju tõhusamalt loobunud. 229 00:11:06,479 --> 00:11:07,770 See on programmi lõppu. 230 00:11:07,770 --> 00:11:10,370 See lagunes, siis kukkus. 231 00:11:10,370 --> 00:11:14,740 Nii ei olnud palju, aga ma tegelikult ei õppida mõndagi 232 00:11:14,740 --> 00:11:16,747 sellest vähe kogemusi. 233 00:11:16,747 --> 00:11:17,580 Mida ma õppisin? 234 00:11:17,580 --> 00:11:22,020 Noh, minu programm jookseb päris palju kohe. 235 00:11:22,020 --> 00:11:26,300 Minu programm jookseb Kõne strcmp, aga ma 236 00:11:26,300 --> 00:11:30,560 ei ole veel ühtegi kohalikud muutujad minu Programmi ajal, et see jookseb. 237 00:11:30,560 --> 00:11:37,320 Mis string või stringid, mida ma võib-olla võrrelda. 238 00:11:37,320 --> 00:11:42,140 Kui mul ei ole ühtegi kohalikku muutujaid, võite 239 00:11:42,140 --> 00:11:45,520 Arvata, et ma have-- seal võibolla on Globaalse muutuja, mis võib olla tõsi. 240 00:11:45,520 --> 00:11:47,670 >> Aga üldiselt tundub nagu ma võrrelda 241 00:11:47,670 --> 00:11:52,070 midagi, mida ei eksisteeri. 242 00:11:52,070 --> 00:11:54,130 Nii uurigem et veidi kaugemale. 243 00:11:54,130 --> 00:11:55,120 Nii et ma lähen kustutada oma ekraanil. 244 00:11:55,120 --> 00:11:57,536 Ma lõpetan välja GDB keskkond teise. 245 00:11:57,536 --> 00:12:01,300 Ja ma olen mõelnud, OK, nii et seal on no kohalikud muutujad minu programm. 246 00:12:01,300 --> 00:12:06,444 Ma ei tea, kas äkki ma peaksin edasi string käsurea argument. 247 00:12:06,444 --> 00:12:07,610 Nii saab lihtsalt testida seda. 248 00:12:07,610 --> 00:12:09,020 Ma ei ole seda varem teinud. 249 00:12:09,020 --> 00:12:14,244 >> Vaatame, kas äkki kui ma saan selle programmi koos käsurea argument see toimib. 250 00:12:14,244 --> 00:12:16,140 Huh, no killustatust süü olemas. 251 00:12:16,140 --> 00:12:17,870 See lihtsalt ütles mulle, et ma arvasin seda. 252 00:12:17,870 --> 00:12:19,170 Ehk see on fix siin. 253 00:12:19,170 --> 00:12:27,560 Ja tõepoolest, kui ma tagasi minna ja vaadata tegelik lähtekoodi buggy1.c, 254 00:12:27,560 --> 00:12:31,180 tundub, et mida ma teen on Ma helistades strcmp ilma 255 00:12:31,180 --> 00:12:34,010 kontrollida, kas tegelikult argv [1] on olemas. 256 00:12:34,010 --> 00:12:36,730 See on tegelikult lähtekoodi buggy1.c. 257 00:12:36,730 --> 00:12:38,855 Mida ma tõesti vaja teha siia, et määrata oma programmi, 258 00:12:38,855 --> 00:12:40,835 eeldades mul esitada minu ees, on 259 00:12:40,835 --> 00:12:44,740 lihtsalt lisada kontrollige Veenduge, et Argc on võrdne 2. 260 00:12:44,740 --> 00:12:47,780 Nii et see näide jällegi, nagu ma ütlesin, on natuke kunstlik, eks? 261 00:12:47,780 --> 00:12:49,840 Sa üldjuhul ei kavatse kogemata kustutada oma lähtekoodi 262 00:12:49,840 --> 00:12:51,820 ja siis on proovida ja siluda programmi. 263 00:12:51,820 --> 00:12:53,120 Aga loodetavasti ta andis sa illustratsioon 264 00:12:53,120 --> 00:12:55,120 on asju, mis siis võiks mõelda 265 00:12:55,120 --> 00:12:56,610 kui sa programmi silumist. 266 00:12:56,610 --> 00:12:58,760 >> Milline on asjade seis siin? 267 00:12:58,760 --> 00:13:00,510 Mis muutujad ma on kättesaadav mind? 268 00:13:00,510 --> 00:13:03,600 Kus täpselt on minu programmi krahh, mida joon, 269 00:13:03,600 --> 00:13:05,240 mida kõne, mida funktsioon? 270 00:13:05,240 --> 00:13:06,952 Millist vihjeid annab see mulle? 271 00:13:06,952 --> 00:13:08,910 Ja see on täpselt Selline mõtteviis, et teil 272 00:13:08,910 --> 00:13:12,820 tuleks sattumist, kui sa oled mõtled silumine oma programme. 273 00:13:12,820 --> 00:13:13,820 >> Ma olen Doug Lloyd. 274 00:13:13,820 --> 00:13:16,140 See on CS50. 275 00:13:16,140 --> 00:15:08,642