1 00:00:00,000 --> 00:00:05,640 2 00:00:05,640 --> 00:00:06,830 >> Даг Ллоид: У реду ГДБ. 3 00:00:06,830 --> 00:00:08,480 Шта је то тачно? 4 00:00:08,480 --> 00:00:11,310 Тако ГДБ, који стоји за ГНУ Дебуггер, 5 00:00:11,310 --> 00:00:15,040 је стварно одличан алат који можемо користити да нам помогну дебуг наше програме, 6 00:00:15,040 --> 00:00:18,210 или сазнају где су ствари иде наопако у нашим програмима. 7 00:00:18,210 --> 00:00:22,590 ГДБ је невероватно моћан, али излаз и интеракција са њом 8 00:00:22,590 --> 00:00:23,830 може бити мало загонетан. 9 00:00:23,830 --> 00:00:28,210 Обично је командна линија алат и може да баци много порука на тебе. 10 00:00:28,210 --> 00:00:31,144 И то може некако тешко парсе тачно шта се дешава. 11 00:00:31,144 --> 00:00:33,560 Срећом, ми смо предузели кораке да поправим овај проблем за вас 12 00:00:33,560 --> 00:00:36,281 као што раде кроз ЦС50. 13 00:00:36,281 --> 00:00:39,030 Ако не користите графичком отклањање грешака, што је мој колега Ден 14 00:00:39,030 --> 00:00:41,570 Армандарсе је прилично говори мало о у видеу који 15 00:00:41,570 --> 00:00:44,740 би требало да буде овде сада, можда ће бити потребно 16 00:00:44,740 --> 00:00:48,270 да користе ове командну линију алати за рад са ГДБ. 17 00:00:48,270 --> 00:00:51,250 Ако радите у ЦС50 ИДЕ не морате да урадите. 18 00:00:51,250 --> 00:00:53,550 Али ако ниси ради у ЦС50 ИДЕ, 19 00:00:53,550 --> 00:00:55,750 можда користећи верзију од ЦС50 Апплианце, 20 00:00:55,750 --> 00:00:58,860 или неки други Линук оперативни систем са ГДБ инсталиран на њему, 21 00:00:58,860 --> 00:01:00,980 можда ћете морати да користите ови командне линије алата. 22 00:01:00,980 --> 00:01:02,860 >> А пошто сте можда мораш то да радиш, то је 23 00:01:02,860 --> 00:01:06,280 корисно само да разуме како ГДБ ради из командне линије. 24 00:01:06,280 --> 00:01:09,650 Али опет, ако сте коришћењем ЦС50 ИДЕ, ви 25 00:01:09,650 --> 00:01:15,400 могу користити графички дебуггер која је уграђена у ИДЕ. 26 00:01:15,400 --> 00:01:18,750 Тако да се иде код ГДБ, за почетак дебуггинг 27 00:01:18,750 --> 00:01:21,220 Процес одређена Програм, све што треба да урадите 28 00:01:21,220 --> 00:01:23,810 је тип ГДБ следи по имену програма. 29 00:01:23,810 --> 00:01:28,620 Тако, на пример, ако је ваш програм здраво, ти би типа ГДБ хелло. 30 00:01:28,620 --> 00:01:31,210 >> Када то урадите, идеш да повуците ГДБ животне средине. 31 00:01:31,210 --> 00:01:33,800 Ваше брзу ће се променити, и уместо да га обично оно 32 00:01:33,800 --> 00:01:35,841 када куцате ствари На командној лине-- лс, 33 00:01:35,841 --> 00:01:38,115 цд-- све ваш типичан Линук команде, своју линију 34 00:01:38,115 --> 00:01:42,200 ће променити, вероватно, нешто као загради ГДБ заградама. 35 00:01:42,200 --> 00:01:46,630 То је твоја нова ГДБ брз, јер ви сте унутар ГДБ окружењу. 36 00:01:46,630 --> 00:01:49,830 Једном унутар тог окружења, постоје две главне команде 37 00:01:49,830 --> 00:01:52,290 да ћете вероватно користити у следећем редоследу. 38 00:01:52,290 --> 00:01:55,200 >> Прво је б, којем је скраћеница за паузу. 39 00:01:55,200 --> 00:01:58,690 И након што сте тип Б, обично упишите назив функције, 40 00:01:58,690 --> 00:02:01,040 или ако се деси да знате око онога што линија број 41 00:02:01,040 --> 00:02:04,100 ваш програм почиње да се понаша мало чудно, 42 00:02:04,100 --> 00:02:06,370 можете уписати линију Број тамо. 43 00:02:06,370 --> 00:02:09,660 Какав Б, или пауза, ради да ли је ваш програм омогућава 44 00:02:09,660 --> 00:02:13,270 да ради до одређене тачке, Наиме, назив функције 45 00:02:13,270 --> 00:02:15,880 да одредите или линија број који сте навели. 46 00:02:15,880 --> 00:02:18,590 >> И у том тренутку је, ће замрзнути извршење. 47 00:02:18,590 --> 00:02:21,670 Ово је стварно добра ствар, јер Једном извршење је замрзнут, 48 00:02:21,670 --> 00:02:25,214 можете почети да јако споро корак кроз програм. 49 00:02:25,214 --> 00:02:28,130 Обично, ако сте били руннинг ваши програми, они су прилично кратко. 50 00:02:28,130 --> 00:02:31,250 Обично, куцате дот сласх год име вашег програма, притисните Ентер, 51 00:02:31,250 --> 00:02:33,470 и пре него што можете да трепне, твој Програм је већ завршен. 52 00:02:33,470 --> 00:02:36,620 Није баш пуно времена да покуша и схватити шта није у реду. 53 00:02:36,620 --> 00:02:40,920 Тако да заиста бити у стању да успори ствари доле постављањем брејк са б, 54 00:02:40,920 --> 00:02:43,040 а затим степпинг у. 55 00:02:43,040 --> 00:02:46,169 >> Онда кад сте подесили бреак тачка, можете покренути програм. 56 00:02:46,169 --> 00:02:47,960 А ако имате било командне линије аргументи, 57 00:02:47,960 --> 00:02:51,610 да их наведете овде, а не када куцате ГДБ ваше име програма. 58 00:02:51,610 --> 00:02:55,980 Ви одређујете све командну линију Аргументи за узимање Р или трчи, 59 00:02:55,980 --> 00:03:00,270 и онда шта год аргументе командне линије Потребан вам је унутар вашег програма. 60 00:03:00,270 --> 00:03:03,510 Постоји велики број других стварно важне и корисне команде 61 00:03:03,510 --> 00:03:04,970 унутар животне средине БДП. 62 00:03:04,970 --> 00:03:07,540 Зато ме пусти само брзо прођем кроз неке од њих. 63 00:03:07,540 --> 00:03:11,320 >> Први је н, што је скраћеница за следећи, а можете уписати следећа уместо н, 64 00:03:11,320 --> 00:03:12,304 како ће радити. 65 00:03:12,304 --> 00:03:13,470 И то је само кратко. 66 00:03:13,470 --> 00:03:17,540 И као што вероватно сте већ стечен некада, бити у стању да куцате ствари 67 00:03:17,540 --> 00:03:20,520 краћи је генерално боље. 68 00:03:20,520 --> 00:03:24,100 И шта ће учинити да је ће корак напред један блок кода. 69 00:03:24,100 --> 00:03:26,170 Тако да ћу кренути напред док се позив функције. 70 00:03:26,170 --> 00:03:28,350 А онда уместо роњење у те функције 71 00:03:28,350 --> 00:03:33,130 и пролази кроз све то функција код, он ће морати функцију. 72 00:03:33,130 --> 00:03:34,400 >> Функција ће се звати. 73 00:03:34,400 --> 00:03:35,733 То ће учинити без обзира на његов рад. 74 00:03:35,733 --> 00:03:38,870 То ће вратити вредност функција која га је назвао. 75 00:03:38,870 --> 00:03:42,490 А онда ћете прећи на Следећа линија тог позивање функције. 76 00:03:42,490 --> 00:03:44,555 Ако желите да корак унутар функције, 77 00:03:44,555 --> 00:03:46,430 уместо да има да изврши, посебно 78 00:03:46,430 --> 00:03:50,004 ако мислите да је проблем Можда леже унутар те функције, 79 00:03:50,004 --> 00:03:52,670 можете, наравно, поставити паузу указују унутар те функције. 80 00:03:52,670 --> 00:03:57,820 Или ако сте већ покренут, можете Употребите с да корак напред једну линију кода. 81 00:03:57,820 --> 00:04:01,170 >> Тако ће овај корак у и роњење у функцијама, 82 00:04:01,170 --> 00:04:04,750 уместо да само имају извршава и наставак дешава у функцији 83 00:04:04,750 --> 00:04:07,380 да си у за отклањање грешака. 84 00:04:07,380 --> 00:04:09,870 Ако сте икада желите да знате вредност променљиве, 85 00:04:09,870 --> 00:04:12,507 можете уписати П или Принт, а затим назив променљиве. 86 00:04:12,507 --> 00:04:15,090 И то ће одштампати за вас, унутар ГДБ животне средине, 87 00:04:15,090 --> 00:04:19,110 име променљиве, које ти- извините ме-- вредност променљиве 88 00:04:19,110 --> 00:04:20,064 да сте по имену. 89 00:04:20,064 --> 00:04:23,230 Ако желите да знате вредности сваког Локална променљива приступити одакле 90 00:04:23,230 --> 00:04:25,970 тренутно се налазе у вашој Програм, можете уписати инфо локално становништво. 91 00:04:25,970 --> 00:04:28,332 То је много брже од куцањем п и онда шта год, 92 00:04:28,332 --> 00:04:30,540 листинг од свега од варијабле које знате постоје. 93 00:04:30,540 --> 00:04:34,370 Можете инфромација локално становништво, и то ће одштампати све за тебе. 94 00:04:34,370 --> 00:04:37,770 Следећи је БТ, који је кратак за Бацк Траце. 95 00:04:37,770 --> 00:04:41,680 Дакле, генерално, посебно у раним ЦС50, 96 00:04:41,680 --> 00:04:44,450 нећете баш имати прилике користити БТ, или натраг Траце, 97 00:04:44,450 --> 00:04:47,860 зато што не водимо функције да зовем друге функције. 98 00:04:47,860 --> 00:04:50,450 >> Ви можда има главну разговора а функција, али то је вероватно то. 99 00:04:50,450 --> 00:04:53,199 Немаш ту другу функцију позива другу функцију која 100 00:04:53,199 --> 00:04:54,880 позива друге функције, и тако даље. 101 00:04:54,880 --> 00:04:57,550 Али, као што ваши програми се више комплекс, а посебно 102 00:04:57,550 --> 00:05:00,290 Када почнете са радом са рекурзије, врати траг 103 00:05:00,290 --> 00:05:05,150 може бити јако користан начин да вас пусти врста мало контекст где 104 00:05:05,150 --> 00:05:06,460 Ја сам у свом програму. 105 00:05:06,460 --> 00:05:10,590 Тако да сте написали свој код, и знате да је главни позива функцију 106 00:05:10,590 --> 00:05:14,720 Ф, која позива функцију г, који позива функцију х. 107 00:05:14,720 --> 00:05:17,650 Дакле, имамо неколико слојева за настанак дешава овде. 108 00:05:17,650 --> 00:05:19,440 >> Ако сте унутар Ваш ГДБ окружење, 109 00:05:19,440 --> 00:05:21,640 а ви знате свој унутрашњи Х, али заборављаш 110 00:05:21,640 --> 00:05:27,210 шта те одакле си су-- можете уписати БТ, или назад траг, 111 00:05:27,210 --> 00:05:32,370 и то ће одштампати х, Г, Ф главни, уз неке друге информације, које 112 00:05:32,370 --> 00:05:35,984 даје појма да је, у реду главна назива Ф, Ф се зове г, Г позвао х 113 00:05:35,984 --> 00:05:37,900 и ту сам Тренутно сам у свом програму. 114 00:05:37,900 --> 00:05:41,380 Дакле, то може бити веома користан, посебно као криптичној-несс оф ГДБ 115 00:05:41,380 --> 00:05:45,667 постаје мало неодољив, да сазнати тачно где ствари. 116 00:05:45,667 --> 00:05:48,500 Коначно, када је ваш програм ради, или када завршите га отклањање грешака 117 00:05:48,500 --> 00:05:50,125 и желите да удаљите од ГДБ животне средине, 118 00:05:50,125 --> 00:05:51,940 то помаже да знају како да изађу из ње. 119 00:05:51,940 --> 00:05:55,500 Можете тип к, или Прекини, да изађе. 120 00:05:55,500 --> 00:05:59,220 Сада, пре данашњег видео Ја сам припремила бугги програм 121 00:05:59,220 --> 00:06:03,900 зове бугги1, који сам саставио из датотеке познат као бугги1.ц. 122 00:06:03,900 --> 00:06:06,500 Као што се може очекивати, ово Програм је у ствари бугги. 123 00:06:06,500 --> 00:06:08,990 Нешто крене наопако када покушам и покрените га. 124 00:06:08,990 --> 00:06:13,014 Сада, нажалост, ненамерно избрисан мој бугги1.ц фајл, 125 00:06:13,014 --> 00:06:15,930 тако да би за мене да схватим шта није у реду са овим програмом, 126 00:06:15,930 --> 00:06:18,770 Ја ћу морати да користе ГДБ врста слепо, покушавајући 127 00:06:18,770 --> 00:06:22,372 да се крећете кроз овај програм до схватим шта није у реду. 128 00:06:22,372 --> 00:06:24,580 Али користећи само алатке смо већ научили о, 129 00:06:24,580 --> 00:06:27,700 можемо прилично много фигуре се тачно шта је то. 130 00:06:27,700 --> 00:06:30,740 Дакле, кренимо преко до ЦС50 ИДЕ и да погледам. 131 00:06:30,740 --> 00:06:33,155 У реду, тако да смо овде у мом ЦС50 ИДЕ окружење, 132 00:06:33,155 --> 00:06:35,697 и ја ћу увећали мало тако да можете видети мало више. 133 00:06:35,697 --> 00:06:38,530 У мом прозору терминала, ако листу садржај мог тренутног директора 134 00:06:38,530 --> 00:06:41,250 са лс, видећемо да сам има неколико изворних датотека 135 00:06:41,250 --> 00:06:44,982 Овде, укључујући претходно разговарали бугги1. 136 00:06:44,982 --> 00:06:46,940 Шта се тачно дешава када Трудим се и покрените бугги1. 137 00:06:46,940 --> 00:06:47,773 Па хајде да сазнамо. 138 00:06:47,773 --> 00:06:52,510 Куцам дот сласх, Бугги, а ја притисните Ентер. 139 00:06:52,510 --> 00:06:53,670 >> Сегментације грешке. 140 00:06:53,670 --> 00:06:55,000 То није добро. 141 00:06:55,000 --> 00:06:57,180 Ако се сећате, А Сегментатион фаулт типично 142 00:06:57,180 --> 00:07:01,540 настаје када се приступи меморији да не сме да дира. 143 00:07:01,540 --> 00:07:03,820 Некако смо стигли изван граница 144 00:07:03,820 --> 00:07:05,995 шта програма, преводилац, нам је дао. 145 00:07:05,995 --> 00:07:08,310 И тако већ да је траг да задржи у кутији за алат 146 00:07:08,310 --> 00:07:10,660 као што смо започели процес отклањање грешака. 147 00:07:10,660 --> 00:07:13,620 Нешто је отишао мало овде није у реду. 148 00:07:13,620 --> 00:07:15,935 >> У реду, Почнимо до тхе ГДБ животне средине 149 00:07:15,935 --> 00:07:19,030 и видимо да ли можемо схватити шта је проблем. 150 00:07:19,030 --> 00:07:21,674 Идем разбистрити екран, и ја ћу да куцате ГДБ 151 00:07:21,674 --> 00:07:24,340 Опет, да уђе у ГДБ животне средине, и назив програма 152 00:07:24,340 --> 00:07:27,450 да желим да дебуг, бугги1. 153 00:07:27,450 --> 00:07:30,182 Ми смо добили малу поруку, читање симболи из бугги1, урађено. 154 00:07:30,182 --> 00:07:32,390 Све то значи да је извукао сви заједно кода, 155 00:07:32,390 --> 00:07:35,570 а сада је био напуњен у ГДБ, и то је спреман да иде. 156 00:07:35,570 --> 00:07:37,140 >> Оно што желим да урадим? 157 00:07:37,140 --> 00:07:39,130 Да ли се сећате шта је Први корак је типично 158 00:07:39,130 --> 00:07:42,540 након што сам унутар ове средине? 159 00:07:42,540 --> 00:07:44,540 Надам се, рекао си сет бреак ствар, јер 160 00:07:44,540 --> 00:07:46,240 У ствари то је оно што желим да урадим. 161 00:07:46,240 --> 00:07:47,990 Сада, ја немам изворни код за ово 162 00:07:47,990 --> 00:07:50,948 испред мене, што је вероватно није типичан случај употребе, успут. 163 00:07:50,948 --> 00:07:52,055 Вероватно хоће. 164 00:07:52,055 --> 00:07:52,680 Дакле, то је добро. 165 00:07:52,680 --> 00:07:55,790 Али под претпоставком да не, шта је онај функција да знате 166 00:07:55,790 --> 00:07:58,880 постоји у свакој Ц програма? 167 00:07:58,880 --> 00:08:04,420 Без обзира колико велики или колико је компликовано је, ова функција дефинитивно постоји. 168 00:08:04,420 --> 00:08:05,440 Главни, зар не? 169 00:08:05,440 --> 00:08:08,870 >> Дакле, што није ништа друго, можемо поставите брејк на главни. 170 00:08:08,870 --> 00:08:12,200 И опет, само да откуцате бреак главни, уместо б. 171 00:08:12,200 --> 00:08:14,650 А ако сте радознали, ако вас икада откуцати дуг команду 172 00:08:14,650 --> 00:08:16,800 и онда схватите да сте куцао погрешну ствар, 173 00:08:16,800 --> 00:08:18,770 и желите да се отарасим од свега што сам управо урадио, 174 00:08:18,770 --> 00:08:22,029 можете преузети контролу У, који ће избрисати све и вратити вас 175 00:08:22,029 --> 00:08:23,570 до почетка курсор линија. 176 00:08:23,570 --> 00:08:26,569 Много брже него само држите брисање или је забио гомилу пута 177 00:08:26,569 --> 00:08:27,080 готова. 178 00:08:27,080 --> 00:08:28,740 >> Тако ћемо поставити брејк на главни. 179 00:08:28,740 --> 00:08:32,970 И као што видите, пише имамо постави брејк на фајл бугги1.ц, 180 00:08:32,970 --> 00:08:36,330 и по свему судећи прва линија кода магистралног је линија седам. 181 00:08:36,330 --> 00:08:38,080 Опет, ми немамо извор фајл овде, 182 00:08:38,080 --> 00:08:40,429 али ћу претпоставити да је ми кажеш истину. 183 00:08:40,429 --> 00:08:44,510 А онда, само покушавам и покрените програм, р. 184 00:08:44,510 --> 00:08:45,360 Покретање програма. 185 00:08:45,360 --> 00:08:48,160 У реду, тако да ова порука је мало загонетан. 186 00:08:48,160 --> 00:08:50,160 Али, у суштини оно што је дешава овде је да је само 187 00:08:50,160 --> 00:08:53,350 говори ми да сам ударио паузу тачка, бреак поинт број 1. 188 00:08:53,350 --> 00:08:55,877 >> А онда, та линија кода, Нема такве датотеке или директоријума. 189 00:08:55,877 --> 00:08:57,710 Једини разлог због којег Видим ту поруку 190 00:08:57,710 --> 00:09:00,800 је зато што сам случајно избрисан мој бугги.ц фајл. 191 00:09:00,800 --> 00:09:04,050 Ако мој бугги1.ц фајл постојао у текућем директоријуму, 192 00:09:04,050 --> 00:09:06,920 та линија право заиста постоји би реци ми шта је линија кода 193 00:09:06,920 --> 00:09:08,214 дословно гласи. 194 00:09:08,214 --> 00:09:09,380 Нажалост, то брише сам. 195 00:09:09,380 --> 00:09:14,790 Ми ћемо морати да некако навигацију кроз ово мало више слепо. 196 00:09:14,790 --> 00:09:17,330 >> У реду, да видимо, шта Не желим да радим овде? 197 00:09:17,330 --> 00:09:21,770 Па, ја бих волео да знам шта локална променљиве можда су доступни за мене. 198 00:09:21,770 --> 00:09:23,570 Ја сам почео мој програм. 199 00:09:23,570 --> 00:09:28,515 Хајде да видимо шта би могло бити Већ инитиализед за нас. 200 00:09:28,515 --> 00:09:31,430 Ја инфромација просторије, нема локално становништво. 201 00:09:31,430 --> 00:09:33,960 У реду, тако да не дај ми тону информација. 202 00:09:33,960 --> 00:09:37,600 Могао бих да покушам и одштампати променљиву, али ја не знам ни имена променљивих. 203 00:09:37,600 --> 00:09:39,930 Могао бих да покушам споредни траг, али сам унутар главни, 204 00:09:39,930 --> 00:09:43,710 тако да знам да нисам направио Друга функција одмах позива. 205 00:09:43,710 --> 00:09:47,710 >> Дакле, изгледа да моје једине опције су користити н или тако и почети да зароните. 206 00:09:47,710 --> 00:09:49,630 Ја ћу користити н. 207 00:09:49,630 --> 00:09:51,180 Тако сам тип бр. 208 00:09:51,180 --> 00:09:53,060 О боже, шта се овде дешава. 209 00:09:53,060 --> 00:09:56,260 Програм је сигнале, СИГСЕГВ Сегментатион фаулт, 210 00:09:56,260 --> 00:09:57,880 а затим гомила ствари. 211 00:09:57,880 --> 00:09:58,880 Већ сам преплављен. 212 00:09:58,880 --> 00:10:00,980 Па, у ствари постоји доста тога да се овде научили. 213 00:10:00,980 --> 00:10:02,520 Дакле, шта нам ово говори? 214 00:10:02,520 --> 00:10:09,180 Оно што нам говори је, овај програм је о да, али још увек није, сец кривица. 215 00:10:09,180 --> 00:10:12,550 И посебно, идем да зумирају још даље овде, 216 00:10:12,550 --> 00:10:18,980 то је управо СЕГ грешку о нешто што се зове стрцмп. 217 00:10:18,980 --> 00:10:22,705 >> Сада, можда нисмо разговарали ова функција нашироко. 218 00:10:22,705 --> 00:10:25,580 Али то је- зато што нећемо да разговара о сваком функцију која 219 00:10:25,580 --> 00:10:28,610 постоји у Ц Стандард либрари-- али су сви вам на располагању, 220 00:10:28,610 --> 00:10:32,110 посебно ако узмете погледај референце.цс50.нет. 221 00:10:32,110 --> 00:10:35,000 И стрцмп је стварно моћан функција која постоји унутар 222 00:10:35,000 --> 00:10:38,070 од стринг.х заглавља филе, што је заглавље 223 00:10:38,070 --> 00:10:41,970 фајл који је посвећен функцијама који раде са и манипулишу жице. 224 00:10:41,970 --> 00:10:49,830 >> И посебно, оно што ради је стрцмп она пореди вредности две жице. 225 00:10:49,830 --> 00:10:54,160 Зато сам хтео да Сегментатион фаулт на позив да стрцмп изгледа. 226 00:10:54,160 --> 00:10:58,530 Ударио сам н, и, у ствари, добијем поруку, Програм престаје са сигналом СИГСЕГВ 227 00:10:58,530 --> 00:11:01,370 Сегментатион фаулт. Па сад Ја у ствари сец окривио, 228 00:11:01,370 --> 00:11:06,479 и мој програм има доста много ефикасније одустао. 229 00:11:06,479 --> 00:11:07,770 Ово је крај програма. 230 00:11:07,770 --> 00:11:10,370 То се покварио, се срушио. 231 00:11:10,370 --> 00:11:14,740 Дакле, није било много, али ја заправо сазнао доста 232 00:11:14,740 --> 00:11:16,747 из овог малог искуства. 233 00:11:16,747 --> 00:11:17,580 Шта сам научио? 234 00:11:17,580 --> 00:11:22,020 Па, мој програм руши прилично одмах. 235 00:11:22,020 --> 00:11:26,300 Мој програм пада на позив на стрцмп, али ја 236 00:11:26,300 --> 00:11:30,560 немају локалне променљиве у мом Програм у време када се разбије. 237 00:11:30,560 --> 00:11:37,320 Па шта стринг или жице, бих могао да будем у односу. 238 00:11:37,320 --> 00:11:42,140 Ако немам неки локални варијабле, могао би 239 00:11:42,140 --> 00:11:45,520 претпоставити да сам тамо бих-- можда је Глобална променљива, која би могла бити истина. 240 00:11:45,520 --> 00:11:47,670 >> Али уопштено гледано, чини се као да сам у односу 241 00:11:47,670 --> 00:11:52,070 на нешто што не постоји. 242 00:11:52,070 --> 00:11:54,130 Дакле, хајде да истражи да мало даље. 243 00:11:54,130 --> 00:11:55,120 Зато ћу разбистрити екран. 244 00:11:55,120 --> 00:11:57,536 Ја ћу да одустанем од од ГДБ окружење за секунду. 245 00:11:57,536 --> 00:12:01,300 И ја сам размишљао, у реду, тако да је нема локалне променљиве у мом програму. 246 00:12:01,300 --> 00:12:06,444 Питам се да ли можда сам требао да прође у низу као аргумент командне линије. 247 00:12:06,444 --> 00:12:07,610 Дакле, хајде да тестирамо ово. 248 00:12:07,610 --> 00:12:09,020 Нисам то и раније. 249 00:12:09,020 --> 00:12:14,244 >> Хајде да видимо да ли можда да ли покренути овај програм са командне линије аргумента ради. 250 00:12:14,244 --> 00:12:16,140 Ха, не сегментације кривица постоји. 251 00:12:16,140 --> 00:12:17,870 То ми је рекао да сам схватио. 252 00:12:17,870 --> 00:12:19,170 Дакле, можда је то овде поправити. 253 00:12:19,170 --> 00:12:27,560 И заиста, ако се вратим и гледај стварни изворни код за бугги1.ц, 254 00:12:27,560 --> 00:12:31,180 изгледа као да оно што радим је Правим позив за стрцмп без 255 00:12:31,180 --> 00:12:34,010 провјеру да ли у ствари аргв [1] постоји. 256 00:12:34,010 --> 00:12:36,730 Ово је заправо изворни код за бугги1.ц. 257 00:12:36,730 --> 00:12:38,855 Дакле, оно што заиста треба да урадимо овде да поправим мој програм, 258 00:12:38,855 --> 00:12:40,835 претпостављајући ја имам филе испред мене, је 259 00:12:40,835 --> 00:12:44,740 само да додате чек да сигуран да аргц! једнако 2. 260 00:12:44,740 --> 00:12:47,780 Дакле, ово пример, опет, као што сам рекао, је мало неприродно, зар не? 261 00:12:47,780 --> 00:12:49,840 Ти генерално неће случајно обрисати свој изворни код 262 00:12:49,840 --> 00:12:51,820 и онда да покушамо и дебуг програм. 263 00:12:51,820 --> 00:12:53,120 Али надамо се, је дао ти једна илустрација 264 00:12:53,120 --> 00:12:55,120 од врсте ствари које можете да размишљате о 265 00:12:55,120 --> 00:12:56,610 како ви отклањање грешака ваш програм. 266 00:12:56,610 --> 00:12:58,760 >> Шта је стање овде? 267 00:12:58,760 --> 00:13:00,510 Шта променљиве И мени имају приступ са мном? 268 00:13:00,510 --> 00:13:03,600 Где је тачно мој програм судара, на којој линији, 269 00:13:03,600 --> 00:13:05,240 на оно што позив на којој функцији? 270 00:13:05,240 --> 00:13:06,952 Какав трагова то ми даје? 271 00:13:06,952 --> 00:13:08,910 И то је управо врста размишљања која вас 272 00:13:08,910 --> 00:13:12,820 Требало би да се у када сте размишљам о дебуггинг своје програме. 273 00:13:12,820 --> 00:13:13,820 >> Ја сам Доуг Лојд. 274 00:13:13,820 --> 00:13:16,140 Ово је ЦС50. 275 00:13:16,140 --> 00:15:08,642