1 00:00:00,000 --> 00:00:05,640 2 00:00:05,640 --> 00:00:06,830 >> DOUG LLOYD: Pob GDB gywir. 3 00:00:06,830 --> 00:00:08,480 Beth yw e yn union? 4 00:00:08,480 --> 00:00:11,310 Felly GDB, sy'n sefyll ar gyfer yr GNU Bar offer, 5 00:00:11,310 --> 00:00:15,040 yn offeryn wirioneddol anhygoel y gallwn defnyddio i'n helpu debug ein rhaglenni, 6 00:00:15,040 --> 00:00:18,210 neu gael gwybod ble mae pethau mynd o chwith yn ein rhaglenni. 7 00:00:18,210 --> 00:00:22,590 GDB yn rhyfeddol o bwerus, ond yr allbwn a rhyngweithio ag ef 8 00:00:22,590 --> 00:00:23,830 Gall fod ychydig yn cryptig. 9 00:00:23,830 --> 00:00:28,210 Mae fel arfer yn arf gorchymyn llinell, a gall daflu llawer o negeseuon ar chi. 10 00:00:28,210 --> 00:00:31,144 Ac y gall y math o galed i dosrannu yn union beth sy'n digwydd. 11 00:00:31,144 --> 00:00:33,560 Yn ffodus, rydym wedi cymryd camau at atgyweiria hon broblem i chi 12 00:00:33,560 --> 00:00:36,281 wrth i chi weithio trwy CS50. 13 00:00:36,281 --> 00:00:39,030 Os nad ydych yn defnyddio'r graffigol dadnamydd, y mae fy nghydweithiwr Dan 14 00:00:39,030 --> 00:00:41,570 Armandarse wedi siarad yn eithaf ychydig am mewn fideo sy'n 15 00:00:41,570 --> 00:00:44,740 Dylai fod dros yma ar hyn o bryd, efallai y bydd angen i chi 16 00:00:44,740 --> 00:00:48,270 i ddefnyddio'r llinell gorchymyn yma offer i weithio gyda GDB. 17 00:00:48,270 --> 00:00:51,250 Os ydych yn gweithio yn y CS50 IDE, nid oes angen i chi wneud hyn. 18 00:00:51,250 --> 00:00:53,550 Ond os nad ydych yn gweithio yn y CS50 IDE, 19 00:00:53,550 --> 00:00:55,750 efallai drwy ddefnyddio fersiwn o Offer CS50, 20 00:00:55,750 --> 00:00:58,860 neu Linux arall sy'n gweithredu system gyda GDB osod arno, 21 00:00:58,860 --> 00:01:00,980 efallai y bydd angen i chi ddefnyddio mae'r rhain offer llinell orchymyn. 22 00:01:00,980 --> 00:01:02,860 >> Ac ers i chi efallai rhaid i ni wneud hynny, 'i' 23 00:01:02,860 --> 00:01:06,280 yn ddefnyddiol dim ond i ddeall sut GDB yn gweithio o'r llinell orchymyn. 24 00:01:06,280 --> 00:01:09,650 Ond unwaith eto, os ydych yn gan ddefnyddio'r IDE CS50, byddwch yn 25 00:01:09,650 --> 00:01:15,400 yn gallu defnyddio'r debugger graffigol sy'n cael ei hadeiladu i mewn i'r DRhA. 26 00:01:15,400 --> 00:01:18,750 Felly, i gael pethau yn mynd â GDB, i gychwyn y debugging 27 00:01:18,750 --> 00:01:21,220 broses o manylyn rhaglen, mae angen i chi ei wneud i gyd 28 00:01:21,220 --> 00:01:23,810 yn teipio eu dilyn GDB o'r enw rhaglen. 29 00:01:23,810 --> 00:01:28,620 Felly, er enghraifft, os yw eich rhaglen yn helo, byddech yn teipio GDB helo. 30 00:01:28,620 --> 00:01:31,210 >> Pan fyddwch yn gwneud hynny, rydych yn mynd i dynnu i fyny ar yr amgylchedd GDB. 31 00:01:31,210 --> 00:01:33,800 Bydd eich brydlon yn newid, ac yn hytrach na bod yr hyn fel arfer 32 00:01:33,800 --> 00:01:35,841 yw pan fyddwch yn teipio pethau yn y ls line-- gorchymyn, 33 00:01:35,841 --> 00:01:38,115 cd-- eich holl nodweddiadol Linux gorchmynion, eich brydlon 34 00:01:38,115 --> 00:01:42,200 Bydd yn newid i, yn ôl pob tebyg, rhywbeth fel cromfachau GDB cromfachau. 35 00:01:42,200 --> 00:01:46,630 Dyna eich prydlon GDB newydd, oherwydd eich bod yn y tu mewn i'r amgylchedd GDB. 36 00:01:46,630 --> 00:01:49,830 Unwaith y tu mewn amgylchedd hwnnw, mae 'na ddau brif gorchmynion 37 00:01:49,830 --> 00:01:52,290 y mae'n debyg y byddwch yn defnyddio yn y drefn ganlynol. 38 00:01:52,290 --> 00:01:55,200 >> Y cyntaf yw b, a oedd yn yn fyr ar gyfer egwyl. 39 00:01:55,200 --> 00:01:58,690 Ac ar ôl i chi deipio b, byddwch fel arfer teipiwch enw swyddogaeth, 40 00:01:58,690 --> 00:02:01,040 neu os ydych yn digwydd i wybod o gwmpas pa rif llinell 41 00:02:01,040 --> 00:02:04,100 eich rhaglen yn dechrau i ymddwyn ychydig yn od, 42 00:02:04,100 --> 00:02:06,370 gallwch deipio llinell Rhif yno hefyd. 43 00:02:06,370 --> 00:02:09,660 Pa b, neu egwyl, yn gwneud yw ei fod yn caniatáu eich rhaglen 44 00:02:09,660 --> 00:02:13,270 i redeg hyd nes y pwynt penodol, sef, enw'r swyddogaeth 45 00:02:13,270 --> 00:02:15,880 eich bod yn nodi neu'r llinell Rhif eich bod yn nodi. 46 00:02:15,880 --> 00:02:18,590 >> Ac ar y pwynt hwnnw, mae'n Bydd rhewi gweithredu. 47 00:02:18,590 --> 00:02:21,670 Mae hyn yn beth da iawn, oherwydd unwaith y bydd gweithredu wedi cael ei rewi, 48 00:02:21,670 --> 00:02:25,214 gallwch ddechrau araf iawn cam drwy eich rhaglen. 49 00:02:25,214 --> 00:02:28,130 Fel arfer, os ydych wedi bod yn rhedeg eich rhaglenni, eu bod yn eithaf byr. 50 00:02:28,130 --> 00:02:31,250 Fel arfer, chi deipio dot slaes beth bynnag enw eich rhaglen, daro Chofnoda, 51 00:02:31,250 --> 00:02:33,470 a cyn y gallwch Blink, eich rhaglen eisoes wedi'i orffen. 52 00:02:33,470 --> 00:02:36,620 Nid yw'n wir yn llawer o amser i roi cynnig a chyfrif i maes beth sy'n mynd o'i le. 53 00:02:36,620 --> 00:02:40,920 Felly y mae mewn gwirionedd i allu arafu pethau i lawr drwy osod pwynt egwyl gyda b, 54 00:02:40,920 --> 00:02:43,040 ac yna camu i mewn. 55 00:02:43,040 --> 00:02:46,169 >> Yna, unwaith y byddwch wedi gosod eich gwyliau bwynt, gallwch redeg y rhaglen. 56 00:02:46,169 --> 00:02:47,960 Ac os oes gennych unrhyw dadleuon llinell orchymyn, 57 00:02:47,960 --> 00:02:51,610 eich bod yn nodi nhw yma, nid pan chi deipio GDB eich enw rhaglen. 58 00:02:51,610 --> 00:02:55,980 Byddwch yn pennu'r holl 'r archa bannod dadleuon drwy gymryd r, neu redeg, 59 00:02:55,980 --> 00:03:00,270 ac yna dadleuon llinell orchymyn beth bynnag mae angen i chi tu mewn i'ch rhaglen. 60 00:03:00,270 --> 00:03:03,510 Mae yna nifer o eraill mewn gwirionedd gorchmynion pwysig a defnyddiol 61 00:03:03,510 --> 00:03:04,970 tu mewn amgylchedd GDP. 62 00:03:04,970 --> 00:03:07,540 Felly gadewch i mi jyst yn gyflym mynd dros rai ohonynt. 63 00:03:07,540 --> 00:03:11,320 >> Y cyntaf yw n, sydd yn fyr am nesaf, a gallwch deipio nesaf yn hytrach na n, 64 00:03:11,320 --> 00:03:12,304 byddai'r ddau yn gweithio. 65 00:03:12,304 --> 00:03:13,470 A 'i' dim ond y llaw-fer. 66 00:03:13,470 --> 00:03:17,540 Ac fel y byddwch wedi gotten yn ôl pob tebyg eisoes arfer, y gallu i deipio pethau 67 00:03:17,540 --> 00:03:20,520 byrrach yn well yn gyffredinol. 68 00:03:20,520 --> 00:03:24,100 A beth fydd yn ei wneud yw ei fe gamu ymlaen un bloc o god. 69 00:03:24,100 --> 00:03:26,170 Felly, bydd yn symud ymlaen hyd nes y swyddogaeth alwad. 70 00:03:26,170 --> 00:03:28,350 Ac yna yn lle plymio i mewn i swyddogaeth honno 71 00:03:28,350 --> 00:03:33,130 a mynd drwy hynny i gyd swyddogaethau cod, bydd yn jyst yn cael y swyddogaeth. 72 00:03:33,130 --> 00:03:34,400 >> Bydd y swyddogaeth yn cael eu galw. 73 00:03:34,400 --> 00:03:35,733 Bydd yn gwneud beth bynnag mae ei waith yn. 74 00:03:35,733 --> 00:03:38,870 Bydd yn dychwelyd gwerth at y swyddogaeth a oedd yn galw arno. 75 00:03:38,870 --> 00:03:42,490 Ac yna byddwch yn symud ymlaen at y llinell nesaf y swyddogaeth honno galw. 76 00:03:42,490 --> 00:03:44,555 Os ydych am i gamu tu mewn i'r swyddogaeth, 77 00:03:44,555 --> 00:03:46,430 hytrach na dim ond cael mae'n gweithredu, yn enwedig 78 00:03:46,430 --> 00:03:50,004 os ydych yn meddwl bod y broblem Gallai gorwedd tu mewn swyddogaeth honno, 79 00:03:50,004 --> 00:03:52,670 fe allech chi, wrth gwrs, yn gosod seibiant pwyntio tu mewn y swyddogaeth honno. 80 00:03:52,670 --> 00:03:57,820 Neu os ydych eisoes yn rhedeg, gallwch defnyddio i gamu ymlaen un llinell o god. 81 00:03:57,820 --> 00:04:01,170 >> Felly, bydd hyn yn camu i mewn a plymio i mewn i swyddogaethau, 82 00:04:01,170 --> 00:04:04,750 hytrach na dim ond yn cael y gweithredu ac yn parhau ar yn y swyddogaeth 83 00:04:04,750 --> 00:04:07,380 eich bod mewn am debugging. 84 00:04:07,380 --> 00:04:09,870 Os ydych chi erioed wedi eisiau ei wybod gwerth newidyn, 85 00:04:09,870 --> 00:04:12,507 gallwch deipio p, neu Print, ac yna yr enw newidyn. 86 00:04:12,507 --> 00:04:15,090 A fydd yn argraffu i chi, tu mewn i'r amgylchedd GDB, 87 00:04:15,090 --> 00:04:19,110 enw'r newidyn, hynny you-- esgusodwch me-- gwerth y newidyn 88 00:04:19,110 --> 00:04:20,064 eich bod wedi enwi. 89 00:04:20,064 --> 00:04:23,230 Os ydych am wybod gwerthoedd pob amrywio hygyrch lleol o ble 90 00:04:23,230 --> 00:04:25,970 ydych chi ar hyn o bryd yn eich rhaglen, gallwch deipio pobl leol info. 91 00:04:25,970 --> 00:04:28,332 Mae'n llawer cyflymach na teipio p ac yna beth bynnag, 92 00:04:28,332 --> 00:04:30,540 rhestru allan bob un o'r newidynnau eich bod yn gwybod yn bodoli. 93 00:04:30,540 --> 00:04:34,370 Gallwch deipio pobl leol gwybodaeth, ac mae'n Bydd argraffu popeth i chi. 94 00:04:34,370 --> 00:04:37,770 Nesaf i fyny yn bt, sef byr ar gyfer Back Trace. 95 00:04:37,770 --> 00:04:41,680 Yn awr, yn gyffredinol, yn enwedig yn gynnar yn CS50, 96 00:04:41,680 --> 00:04:44,450 ni fyddwch mewn gwirionedd yn cael achlysur i ddefnyddio bt, neu Back Trace, 97 00:04:44,450 --> 00:04:47,860 oherwydd nad ydych yn cael swyddogaethau sy'n galw swyddogaethau eraill. 98 00:04:47,860 --> 00:04:50,450 >> Efallai eich bod wedi prif alwad yn swyddogaeth, ond mae hynny'n fwy na thebyg. 99 00:04:50,450 --> 00:04:53,199 Nid oes gennych swyddogaeth honno eraill yn galw swyddogaeth arall, a oedd yn 100 00:04:53,199 --> 00:04:54,880 yn galw swyddogaeth arall, ac yn y blaen. 101 00:04:54,880 --> 00:04:57,550 Ond wrth eich rhaglenni yn cael mwy cymhleth, ac yn arbennig 102 00:04:57,550 --> 00:05:00,290 pan fyddwch yn dechrau gweithio gyda dychweliad, olrhain yn ôl 103 00:05:00,290 --> 00:05:05,150 Gall fod yn ffordd ddefnyddiol iawn i adael i chi fath o gael rhywfaint o gyd-destun lle 104 00:05:05,150 --> 00:05:06,460 Yr wyf yn fy rhaglen. 105 00:05:06,460 --> 00:05:10,590 Felly, yn dweud eich bod wedi ysgrifennu eich cod, a eich bod yn gwybod mai prif galwadau swyddogaeth 106 00:05:10,590 --> 00:05:14,720 f, sy'n galw swyddogaeth g, sy'n galw swyddogaeth h. 107 00:05:14,720 --> 00:05:17,650 Felly mae gennym sawl haen o nythu yn digwydd yma. 108 00:05:17,650 --> 00:05:19,440 >> Os ydych chi y tu mewn o eich amgylchedd GDB, 109 00:05:19,440 --> 00:05:21,640 a ydych yn gwybod eich tu mewn o h, ond byddwch yn anghofio 110 00:05:21,640 --> 00:05:27,210 am yr hyn rhaid i chi ble rydych yn yw-- gallwch deipio bt, neu olrhain yn ôl, 111 00:05:27,210 --> 00:05:32,370 a bydd yn argraffu h, g, f prif, ochr yn ochr â rhywfaint o wybodaeth arall, a oedd yn 112 00:05:32,370 --> 00:05:35,984 rhoi cliw i chi, prif OK Gelwir f, f elwir yn g, g elwir h, 113 00:05:35,984 --> 00:05:37,900 a dyna lle yr wyf yn wyf ar hyn o bryd yn fy rhaglen. 114 00:05:37,900 --> 00:05:41,380 Felly gall fod yn ddefnyddiol iawn, yn enwedig gan fod y cryptig-Ness o GDB 115 00:05:41,380 --> 00:05:45,667 yn dod yn ychydig yn llethol, i cael gwybod yn union ble mae pethau. 116 00:05:45,667 --> 00:05:48,500 Yn olaf, pan fydd eich rhaglen yn cael ei wneud, neu pan fyddwch chi'n ei wneud debugging ei 117 00:05:48,500 --> 00:05:50,125 ac rydych am i gamu i ffwrdd o'r amgylchedd GDB, 118 00:05:50,125 --> 00:05:51,940 mae'n helpu i wybod sut i ddod allan ohono. 119 00:05:51,940 --> 00:05:55,500 Gallwch deipio q, neu Ymadael, i fynd allan. 120 00:05:55,500 --> 00:05:59,220 Yn awr, cyn i fideo heddiw Yr wyf yn paratoi rhaglen buggy 121 00:05:59,220 --> 00:06:03,900 Gelwir buggy1, yr wyf luniwyd o ffeil a elwir yn buggy1.c. 122 00:06:03,900 --> 00:06:06,500 Fel y byddech yn disgwyl, mae hyn yn rhaglen mewn gwirionedd bygi. 123 00:06:06,500 --> 00:06:08,990 Rhywbeth yn mynd o'i le pan fyddaf yn ceisio rhedeg. 124 00:06:08,990 --> 00:06:13,014 Yn awr, yn anffodus, yr wyf yn anfwriadol dileu fy ffeil buggy1.c, 125 00:06:13,014 --> 00:06:15,930 felly er mwyn i mi chyfrif i maes beth sy'n mynd o'i le ar y rhaglen hon, 126 00:06:15,930 --> 00:06:18,770 Rydw i'n mynd i gael i ddefnyddio GDB fath o blindly, yn ceisio 127 00:06:18,770 --> 00:06:22,372 i lywio drwy'r rhaglen hon i ffigur yn union beth sy'n mynd o'i le. 128 00:06:22,372 --> 00:06:24,580 Ond gan ddefnyddio dim ond yr offer rydym eisoes wedi dysgu am, 129 00:06:24,580 --> 00:06:27,700 allwn 'n bert lawer ffigur beth yn union y mae. 130 00:06:27,700 --> 00:06:30,740 Felly gadewch i ni ben ar at CS50 IDE a chael golwg. 131 00:06:30,740 --> 00:06:33,155 Iawn, felly rydym ni yma yn fy CS50 amgylchedd IDE, 132 00:06:33,155 --> 00:06:35,697 a byddaf yn chwyddo i mewn ychydig bach fel y gallwch weld ychydig yn fwy. 133 00:06:35,697 --> 00:06:38,530 Yn fy ffenestr terfynell, os wyf yn rhestru cynnwys fy cyfarwyddwr presennol 134 00:06:38,530 --> 00:06:41,250 gyda ls, byddwn yn gweld fy mod cael un neu ddau o ffeiliau ffynhonnell 135 00:06:41,250 --> 00:06:44,982 yma, gan gynnwys y Trafododd buggy1 flaenorol. 136 00:06:44,982 --> 00:06:46,940 Beth yn union sy'n digwydd pan Yr wyf yn ceisio rhedeg buggy1. 137 00:06:46,940 --> 00:06:47,773 Wel gadewch i ni gael gwybod. 138 00:06:47,773 --> 00:06:52,510 Yr wyf yn teipio dot slaes, buggy, ac yr wyf daro Chofnoda. 139 00:06:52,510 --> 00:06:53,670 >> Namau segmentu. 140 00:06:53,670 --> 00:06:55,000 Dyw hynny ddim yn dda. 141 00:06:55,000 --> 00:06:57,180 Os cofiwch, yn fai segmentiad nodweddiadol 142 00:06:57,180 --> 00:07:01,540 yn digwydd pan fyddwn yn cael mynediad cof nad ydym yn caniatáu i gyffwrdd. 143 00:07:01,540 --> 00:07:03,820 Rydym wedi cyrraedd rywsut y tu allan i'r terfynau 144 00:07:03,820 --> 00:07:05,995 o'r hyn y mae'r rhaglen, mae'r compiler, wedi rhoi i ni. 145 00:07:05,995 --> 00:07:08,310 Ac felly yn barod fod 'na cliw i gadw yn y blwch offer 146 00:07:08,310 --> 00:07:10,660 wrth i ni ddechrau ar y broses debugging. 147 00:07:10,660 --> 00:07:13,620 Rhywbeth wedi mynd ychydig o'i le yma. 148 00:07:13,620 --> 00:07:15,935 >> Mae pob hawl, felly gadewch i ni ddechrau i fyny yr amgylchedd GDB 149 00:07:15,935 --> 00:07:19,030 a gweld os gallwn chyfrif i maes beth yn union yw'r broblem. 150 00:07:19,030 --> 00:07:21,674 Rydw i'n mynd i glirio fy sgrîn, ac yr wyf i'n mynd i deipio GDB 151 00:07:21,674 --> 00:07:24,340 unwaith eto, i fynd i mewn i'r amgylchedd GDB, ac enw'r rhaglen 152 00:07:24,340 --> 00:07:27,450 yr wyf am i debug, buggy1. 153 00:07:27,450 --> 00:07:30,182 Rydym yn cael ychydig neges, darllen symbolau o buggy1, ei wneud. 154 00:07:30,182 --> 00:07:32,390 Y cyfan sydd ei olygu yw ei dynnu ynghyd yr holl o'r cod, 155 00:07:32,390 --> 00:07:35,570 ac yn awr mae wedi cael ei llwytho i mewn GDB, ac mae'n barod i fynd. 156 00:07:35,570 --> 00:07:37,140 >> Yn awr, beth ydw i am ei wneud? 157 00:07:37,140 --> 00:07:39,130 A ydych yn cofio yr hyn y mae'r cam cyntaf fel arfer yw 158 00:07:39,130 --> 00:07:42,540 ar ôl fy mod tu mewn amgylchedd hwn? 159 00:07:42,540 --> 00:07:44,540 Gobeithio, dywedasoch osod pwynt egwyl, gan fod 160 00:07:44,540 --> 00:07:46,240 mewn gwirionedd dyna yr wyf am ei wneud. 161 00:07:46,240 --> 00:07:47,990 Yn awr, nid oes gennyf y cod ffynhonnell ar gyfer hyn 162 00:07:47,990 --> 00:07:50,948 o fy mlaen, sydd yn ôl pob tebyg nid yw'r achos defnydd nodweddiadol, gyda llaw. 163 00:07:50,948 --> 00:07:52,055 Mae'n debyg y byddwch yn gwneud hynny. 164 00:07:52,055 --> 00:07:52,680 Felly dyna dda. 165 00:07:52,680 --> 00:07:55,790 Ond gan dybio nad ydych, beth sydd yr un swyddogaeth eich bod yn gwybod 166 00:07:55,790 --> 00:07:58,880 yn bodoli ym mhob rhaglen C sengl? 167 00:07:58,880 --> 00:08:04,420 Waeth pa mor fawr neu pa mor gymhleth y mae, y swyddogaeth hon yn bendant yn bodoli. 168 00:08:04,420 --> 00:08:05,440 Main, dde? 169 00:08:05,440 --> 00:08:08,870 >> Felly yn methu dim arall, gallwn gosod pwynt torri yn y prif. 170 00:08:08,870 --> 00:08:12,200 Ac eto, gallwn i jyst deipio torri prif, yn hytrach na b. 171 00:08:12,200 --> 00:08:14,650 Ac os ydych chi'n chwilfrydig, os ydych byth deipio allan gorchymyn hir 172 00:08:14,650 --> 00:08:16,800 ac yna sylweddoli bod chi teipio y peth anghywir, 173 00:08:16,800 --> 00:08:18,770 a'ch bod am gael gwared o'r holl fel yr wyf newydd y gwnaeth, 174 00:08:18,770 --> 00:08:22,029 y gallwch eu cymryd Rheoli U, a fydd dileu popeth a dod â chi'n ôl 175 00:08:22,029 --> 00:08:23,570 i gychwyn y llinellau cyrchwr. 176 00:08:23,570 --> 00:08:26,569 Mae llawer cyflymach na dim ond dal i lawr y dileu, neu daro ei griw o weithiau 177 00:08:26,569 --> 00:08:27,080 drosodd. 178 00:08:27,080 --> 00:08:28,740 >> Felly, byddwn yn gosod pwynt torri ar mhrif. 179 00:08:28,740 --> 00:08:32,970 Ac fel y gwelwch, mae'n dweud ein bod i wedi gosod pwynt torri ar buggy1.c ffeil, 180 00:08:32,970 --> 00:08:36,330 ac i bob golwg y llinell gyntaf o god brif linell yn saith. 181 00:08:36,330 --> 00:08:38,080 Unwaith eto, nid oes gennym y ffeil ffynhonnell yma, 182 00:08:38,080 --> 00:08:40,429 ond byddaf yn cymryd yn ganiataol ei fod yn dweud wrthyf y gwir. 183 00:08:40,429 --> 00:08:44,510 Ac yna, Im 'jyst yn ceisio ac yn rhedeg y rhaglen, r. 184 00:08:44,510 --> 00:08:45,360 Rhaglen Cychwyn. 185 00:08:45,360 --> 00:08:48,160 Mae pob hawl, felly neges hon yn ychydig yn cryptig. 186 00:08:48,160 --> 00:08:50,160 Ond yn y bôn yr hyn sy'n digwydd yma yw mai dim ond 187 00:08:50,160 --> 00:08:53,350 yn dweud wrthyf fy mod i wedi taro fy egwyl pwynt, torri Rhif pwynt 1. 188 00:08:53,350 --> 00:08:55,877 >> Ac yna, y llinell o god, dim ffeil neu cyfeiriadur o'r fath. 189 00:08:55,877 --> 00:08:57,710 Yr unig reswm y Rwy'n gweld y neges 190 00:08:57,710 --> 00:09:00,800 yw oherwydd fy mod yn anfwriadol dileu fy ffeil buggy.c. 191 00:09:00,800 --> 00:09:04,050 Os yw fy ffeil buggy1.c yn bodoli yn y cyfeiriadur cyfredol, 192 00:09:04,050 --> 00:09:06,920 bod hawl llinell yno byddai mewn gwirionedd ddweud wrthyf beth y llinell o god 193 00:09:06,920 --> 00:09:08,214 yn llythrennol yn darllen. 194 00:09:08,214 --> 00:09:09,380 Yn anffodus, yr wyf yn dileu hi. 195 00:09:09,380 --> 00:09:14,790 Rydym yn mynd i gael i fath o lywio drwy hyn ychydig yn fwy blindly. 196 00:09:14,790 --> 00:09:17,330 >> Iawn, felly gadewch i ni weld, beth Nid wyf am ei wneud yma? 197 00:09:17,330 --> 00:09:21,770 Wel, hoffwn wybod beth lleol efallai newidynnau ar gael i mi. 198 00:09:21,770 --> 00:09:23,570 Rydw i wedi dechrau fy rhaglen. 199 00:09:23,570 --> 00:09:28,515 Gadewch i ni weld beth allai fod initialized eisoes i ni. 200 00:09:28,515 --> 00:09:31,430 Yr wyf yn teipio pobl leol Info, dim bobl leol. 201 00:09:31,430 --> 00:09:33,960 Mae pob hawl, fel nad yn gwneud hynny rhoi tunnell o wybodaeth i mi. 202 00:09:33,960 --> 00:09:37,600 Gallwn roi cynnig ac argraffu newidyn, ond nid wyf yn gwybod unrhyw enwau amrywiol. 203 00:09:37,600 --> 00:09:39,930 Gallwn roi cynnig olrhain yn ôl, ond rwy'n tu mewn prif, 204 00:09:39,930 --> 00:09:43,710 felly yr wyf yn gwybod nad wyf wedi gwneud swyddogaeth alwad arall ar hyn o bryd. 205 00:09:43,710 --> 00:09:47,710 >> Felly, yn edrych fel fy unig opsiynau sydd i ddefnyddio n neu hynny ac yn dechrau i ddeifio i mewn. 206 00:09:47,710 --> 00:09:49,630 Rydw i'n mynd i ddefnyddio n. 207 00:09:49,630 --> 00:09:51,180 Felly, yr wyf yn teipio n. 208 00:09:51,180 --> 00:09:53,060 O fy diar, yr hyn sy'n digwydd yma. 209 00:09:53,060 --> 00:09:56,260 Rhaglen a dderbyniwyd signalau, SIGSEGV fai segmentu, 210 00:09:56,260 --> 00:09:57,880 ac yna criw cyfan o bethau. 211 00:09:57,880 --> 00:09:58,880 Rwy'n barod llethu. 212 00:09:58,880 --> 00:10:00,980 Wel, mae mewn gwirionedd yn llawer i'w dysgu yma. 213 00:10:00,980 --> 00:10:02,520 Felly beth mae hyn yn ei ddweud wrthym? 214 00:10:02,520 --> 00:10:09,180 Yr hyn mae'n ei ddweud wrthym yw, mae'r rhaglen hon yn fin, ond nid yw eto, fai SEG. 215 00:10:09,180 --> 00:10:12,550 Ac yn arbennig, dw i'n mynd i chwyddo i mewn hyd yn oed ymhellach fan hyn, 216 00:10:12,550 --> 00:10:18,980 mae'n ymwneud i SEG fai am rywbeth o'r enw strcmp. 217 00:10:18,980 --> 00:10:22,705 >> Nawr, efallai nad ydym wedi trafod swyddogaeth hon yn helaeth. 218 00:10:22,705 --> 00:10:25,580 Ond mae'n yw-- am nad ydym yn mynd i siarad am bob swyddogaeth sy'n 219 00:10:25,580 --> 00:10:28,610 yn bodoli yn y safon C library-- ond maen nhw i gyd ar gael i chi, 220 00:10:28,610 --> 00:10:32,110 yn enwedig os ydych yn cymryd edrych ar reference.cs50.net. 221 00:10:32,110 --> 00:10:35,000 Ac strcmp yn wirioneddol pwerus swyddogaeth sy'n bodoli y tu mewn 222 00:10:35,000 --> 00:10:38,070 y pennawd string.h ffeil, sydd yn header 223 00:10:38,070 --> 00:10:41,970 ffeil sy'n cael ei neilltuo i swyddogaethau bod gwaith gyda a thrin llinynnau. 224 00:10:41,970 --> 00:10:49,830 >> Ac yn benodol, yr hyn strcmp wneud yw mae'n cymharu gwerthoedd dau llinynnau. 225 00:10:49,830 --> 00:10:54,160 Felly rwy'n ar fin segmentu fai ar alwad i strcmp mae'n ymddangos. 226 00:10:54,160 --> 00:10:58,530 Yr wyf yn taro n, ac yn wir yr wyf yn cael y neges, rhaglen i ben gyda SIGSEGV signal 227 00:10:58,530 --> 00:11:01,370 fai segmentu. Felly nawr Fi 'n weithredol wedi ffawtiau SEG, 228 00:11:01,370 --> 00:11:06,479 ac mae fy rhaglen wedi 'n bert llawer rhoi'r gorau yn effeithiol. 229 00:11:06,479 --> 00:11:07,770 Mae hyn yn ddiwedd y rhaglen. 230 00:11:07,770 --> 00:11:10,370 Mae'n torri i lawr, ei chwalu. 231 00:11:10,370 --> 00:11:14,740 Felly nid oedd llawer, ond yr wyf yn mewn gwirionedd oedd yn dysgu cryn dipyn 232 00:11:14,740 --> 00:11:16,747 o'r profiad bach hwn. 233 00:11:16,747 --> 00:11:17,580 Yr hyn yr wyf wedi ei ddysgu? 234 00:11:17,580 --> 00:11:22,020 Wel, fy rhaglen damweiniau 'n bert lawer ar unwaith. 235 00:11:22,020 --> 00:11:26,300 Fy rhaglen damweiniau ar a ffonio i strcmp, ond yr wyf yn 236 00:11:26,300 --> 00:11:30,560 Nid oes rhaid i unrhyw newidynnau lleol yn fy rhaglen ar y pryd y mae'n damweiniau. 237 00:11:30,560 --> 00:11:37,320 Felly beth llinyn, neu llinynnau, allwn yn fy myw yn cymharu. 238 00:11:37,320 --> 00:11:42,140 Os nad oes gennyf unrhyw leol newidynnau, efallai y byddwch 239 00:11:42,140 --> 00:11:45,520 dybio fy mod have-- yno efallai yn newidyn byd-eang, a allai fod yn wir. 240 00:11:45,520 --> 00:11:47,670 >> Ond yn gyffredinol, mae'n ymddangos fel mod i'n cymharu 241 00:11:47,670 --> 00:11:52,070 i rywbeth nad yw'n bodoli. 242 00:11:52,070 --> 00:11:54,130 Felly gadewch i ni ymchwilio bod ychydig yn bellach. 243 00:11:54,130 --> 00:11:55,120 Felly, yr wyf i'n mynd i glirio fy sgrin. 244 00:11:55,120 --> 00:11:57,536 Rydw i'n mynd i roi'r gorau iddi allan o'r Amgylchedd GDB am eiliad. 245 00:11:57,536 --> 00:12:01,300 A dwi'n meddwl, OK, felly mae dim newidynnau lleol yn fy rhaglen. 246 00:12:01,300 --> 00:12:06,444 Tybed efallai Im 'i fod i basio mewn llinyn fel ymresymiad llinell orchymyn. 247 00:12:06,444 --> 00:12:07,610 Felly gadewch i ni jyst profi hyn allan. 248 00:12:07,610 --> 00:12:09,020 Nid wyf wedi gwneud hyn o'r blaen. 249 00:12:09,020 --> 00:12:14,244 >> Gadewch i ni weld os efallai os byddaf yn rhedeg y rhaglen hon gyda ymresymiad llinell orchymyn y mae'n gweithio. 250 00:12:14,244 --> 00:12:16,140 Huh, dim bai segmentu yno. 251 00:12:16,140 --> 00:12:17,870 'I jyst dweud wrtha i fod fy mod cyfrifedig allan. 252 00:12:17,870 --> 00:12:19,170 Felly efallai mai dyna y atgyweiria yma. 253 00:12:19,170 --> 00:12:27,560 Ac yn wir, os wyf yn mynd yn ôl ac edrych ar y cod ffynhonnell gwirioneddol ar gyfer buggy1.c, 254 00:12:27,560 --> 00:12:31,180 mae'n ymddangos fel pe hyn rwy'n ei wneud yw Fy mod yn gwneud galwad i strcmp heb 255 00:12:31,180 --> 00:12:34,010 gwirio a yw mewn gwirionedd argv [1] yn bodoli. 256 00:12:34,010 --> 00:12:36,730 Mae hyn mewn gwirionedd y cod ffynhonnell ar gyfer buggy1.c. 257 00:12:36,730 --> 00:12:38,855 Felly beth Fi 'n sylweddol angen i ni wneud yma at atgyweiria fy rhaglen, 258 00:12:38,855 --> 00:12:40,835 gan dybio Mae gen i'r ffeilio o fy mlaen, yw 259 00:12:40,835 --> 00:12:44,740 i ddim ond ychwanegu siec i wneud yn siwr bod argc yn hafal i 2. 260 00:12:44,740 --> 00:12:47,780 Felly yr enghraifft hon, unwaith eto, fel y dywedais, ychydig yn ddyfeisgar, dde? 261 00:12:47,780 --> 00:12:49,840 Nad ydych yn mynd yn gyffredinol i yn ddamweiniol dileu eich cod ffynhonnell 262 00:12:49,840 --> 00:12:51,820 ac mae'n rhaid wedyn i roi cynnig a debug rhaglen. 263 00:12:51,820 --> 00:12:53,120 Ond gobeithio, rhoddodd chi darlun 264 00:12:53,120 --> 00:12:55,120 o'r mathau o bethau sy'n gallech fod yn meddwl am 265 00:12:55,120 --> 00:12:56,610 fel eich bod yn debugging eich rhaglen. 266 00:12:56,610 --> 00:12:58,760 >> Beth yw gyflwr materion yma? 267 00:12:58,760 --> 00:13:00,510 Pa newidynnau yn ei wneud i mi rhaid hygyrch i mi? 268 00:13:00,510 --> 00:13:03,600 Ble yn union yw fy rhaglen chwilfriwio, ar ba lein, 269 00:13:03,600 --> 00:13:05,240 ar ba alwad i ba swyddogaeth? 270 00:13:05,240 --> 00:13:06,952 Pa fath o gliwiau mae hynny'n ei roi i mi? 271 00:13:06,952 --> 00:13:08,910 A dyna yn union yr math o feddylfryd sy'n eich 272 00:13:08,910 --> 00:13:12,820 Dylid mynd i mewn pan fyddwch chi meddwl am debugging eich rhaglenni. 273 00:13:12,820 --> 00:13:13,820 >> Rwy'n Doug Lloyd. 274 00:13:13,820 --> 00:13:16,140 Mae hyn yn CS50. 275 00:13:16,140 --> 00:15:08,642