1 00:00:00,000 --> 00:00:00,309 2 00:00:00,309 --> 00:00:02,350 [? Дан АРМАДАРАС:] Здраво, Ја сам [? Ден Армадарас?]. 3 00:00:02,350 --> 00:00:04,410 Данас, ћемо се гледа отклањање грешака. 4 00:00:04,410 --> 00:00:06,697 Не само да ћемо причати о неким техникама, 5 00:00:06,697 --> 00:00:09,280 али ћемо да погледамо неке особине садржи 6 00:00:09,280 --> 00:00:14,170 у ЦС50 ИДЕ које дозвољавају да лако дебуг програм. 7 00:00:14,170 --> 00:00:16,272 >> Само један од примера нешто што може да пође наопако 8 00:00:16,272 --> 00:00:18,730 и то је заправо нешто да смо већ видели раније. 9 00:00:18,730 --> 00:00:23,200 У овом случају, ово је Ц програм који прихвата цео број од корисника, 10 00:00:23,200 --> 00:00:27,580 дели га са два, а пружа излаз назад на корисник. 11 00:00:27,580 --> 00:00:30,610 Сада од онога што смо видели раније на предавањима, 12 00:00:30,610 --> 00:00:34,370 знамо да ће то заиста изазвати специфичне врсте проблема поделе 13 00:00:34,370 --> 00:00:35,860 када имамо непарне бројеве. 14 00:00:35,860 --> 00:00:40,330 >> Наиме, само ћемо бацити нешто после децималног зареза. 15 00:00:40,330 --> 00:00:43,170 Дакле, ми знамо да је ово деси да буде случај. 16 00:00:43,170 --> 00:00:47,430 И ако га покренути, можемо потврдити наше сумње, први, по прикупљању. 17 00:00:47,430 --> 00:00:50,460 И онда, трчање и уласка непаран број. 18 00:00:50,460 --> 00:00:51,720 >> Ово није ништа ново. 19 00:00:51,720 --> 00:00:54,490 Али то је заправо пример бубу 20 00:00:54,490 --> 00:00:58,810 може постојати у оквиру ширег програма која постаје теже пратити. 21 00:00:58,810 --> 00:01:02,640 Иако знамо шта је проблем је, прави суштина ствари 22 00:01:02,640 --> 00:01:06,250 можда покушава да идентификује посебно где се грешка 23 00:01:06,250 --> 00:01:09,750 идентификовање шта тај проблем је, а затим га поправи. 24 00:01:09,750 --> 00:01:14,400 Дакле, дају ово као пример шта би могло бити нешто 25 00:01:14,400 --> 00:01:19,030 да већ знамо, али могу бити сахрањен у другим елементима кода. 26 00:01:19,030 --> 00:01:23,090 >> Тако отварања овог други извор Код слику као пример, 27 00:01:23,090 --> 00:01:27,165 Овај проблем подела је сада део ширег програма. 28 00:01:27,165 --> 00:01:29,040 Ипак можда мало мало измишљен, а ми 29 00:01:29,040 --> 00:01:31,076 Можда ћете моћи лако идентификују се, нарочито 30 00:01:31,076 --> 00:01:32,450 јер ми само говоримо ово. 31 00:01:32,450 --> 00:01:38,250 Али можемо схватити да је ово Проблем може постојати у већем обиму. 32 00:01:38,250 --> 00:01:45,450 >> Ако саставити ово и сад покрените га, унесите непаран број, 33 00:01:45,450 --> 00:01:49,816 можемо видети да не будемо тачно излаз да смо можда очекивали. 34 00:01:49,816 --> 00:01:51,690 У овом конкретном случају, можемо рећи да смо 35 00:01:51,690 --> 00:01:56,060 Желим да рачунају све бројеве од једног до неке специфичне број. 36 00:01:56,060 --> 00:01:58,130 И можемо да видимо да имају различите питања 37 00:01:58,130 --> 00:02:03,880 овде ако смо излаза, једноставно, 0 и 1 када се дају допринос од 5. 38 00:02:03,880 --> 00:02:07,380 >> Дакле, ми већ знамо да нема ту проблема. 39 00:02:07,380 --> 00:02:11,662 Али не могу да знам тачно где се то питање заиста постоји. 40 00:02:11,662 --> 00:02:13,620 Сада је један од начина да можемо покушати да поправи ово 41 00:02:13,620 --> 00:02:15,745 је нешто што имамо већ уведен у. 42 00:02:15,745 --> 00:02:18,880 Можемо га користити у већем обиму. 43 00:02:18,880 --> 00:02:21,680 >> Он лине 14, имамо ово Функција принтф, 44 00:02:21,680 --> 00:02:25,620 што нам омогућава да одштампате државе различитих делова информација. 45 00:02:25,620 --> 00:02:28,880 И то је нешто што вас треба искористити у оквиру вашег програма 46 00:02:28,880 --> 00:02:33,100 покушати да схватим шта је дешавало у разним линија кода. 47 00:02:33,100 --> 00:02:36,350 Дакле, чак и ако то није крајњи резултат да смо заправо 48 00:02:36,350 --> 00:02:39,830 Желим да се произведе од овај програм, још увек 49 00:02:39,830 --> 00:02:42,300 можда има неку дебуг изјаве где смо 50 00:02:42,300 --> 00:02:46,970 можете покушати да схватимо шта тачно се дешава унутар нашег кода. 51 00:02:46,970 --> 00:02:51,210 >> Дакле, у овом случају, ја ћу принтф са дебуг таг. 52 00:02:51,210 --> 00:02:53,540 У овом случају, ово је Само дебуг низ 53 00:02:53,540 --> 00:02:56,840 да сам горе-стављајући тако да постаје врло јасан у излазу мог кода 54 00:02:56,840 --> 00:02:59,200 шта је то што желим да покажем. 55 00:02:59,200 --> 00:03:04,410 А излаз овде број да смо израчунати. 56 00:03:04,410 --> 00:03:06,800 >> У том случају, могао бих Желим да знам прецизно 57 00:03:06,800 --> 00:03:11,380 шта се дешава пре и после неког конкретног рачунања. 58 00:03:11,380 --> 00:03:16,224 Тако да сам могао користити принтф пре а након тога линију кода. 59 00:03:16,224 --> 00:03:18,640 У овом случају, чак сам могао чине га мало јасније 60 00:03:18,640 --> 00:03:21,960 рекавши дебуг пре и исправљање после толико 61 00:03:21,960 --> 00:03:26,540 да не се помешати са више линије које изгледају идентично. 62 00:03:26,540 --> 00:03:32,290 >> Сада, ако смо рекомпајлирајте ово анд Рун да, унесите број као пет опет, 63 00:03:32,290 --> 00:03:35,090 видимо да имамо одмах излаз пре и после 64 00:03:35,090 --> 00:03:40,670 и сматрају да нисмо урадили јасна подела или јасно имају броја 65 00:03:40,670 --> 00:03:43,680 да ми заправо желимо да урадимо. 66 00:03:43,680 --> 00:03:48,660 Сада у овом случају, ово је Није баш јасно излаз. 67 00:03:48,660 --> 00:03:52,440 Није баш јасно да исход желимо из овог одређеног програма. 68 00:03:52,440 --> 00:03:54,427 >> И ово је, опет, мало измишљен. 69 00:03:54,427 --> 00:03:57,510 Али, можда, једна од ствари које можемо да урадимо ако спецификација рекао 70 00:03:57,510 --> 00:04:01,900 да желимо да поделимо овај од 2 и додати 1-- тако Другим речима, 71 00:04:01,900 --> 00:04:04,550 желимо да заокружите их-- онда могли бисмо знали да смо могли 72 00:04:04,550 --> 00:04:08,060 Урадите то одређену ствар, у овом случају. 73 00:04:08,060 --> 00:04:14,010 Сада овде знамо да ћемо бити у стању да додаје 1 наше преполовљен број. 74 00:04:14,010 --> 00:04:16,490 >> Хајде да ово рецомпиле и потврдите да је ово 75 00:04:16,490 --> 00:04:18,860 понаша на начин на који желимо да. 76 00:04:18,860 --> 00:04:21,980 Видимо да је сада пред који има, имамо број 5. 77 00:04:21,980 --> 00:04:26,620 Након имамо број 3, који је према нашим спецификацији, 78 00:04:26,620 --> 00:04:29,292 је оно што смо желели да урадимо. 79 00:04:29,292 --> 00:04:31,000 Али ако погледамо излаз овде, можемо 80 00:04:31,000 --> 00:04:33,760 видим да бисмо могли имати још један буг свеукупно, што је 81 00:04:33,760 --> 00:04:36,940 да почињемо нашу бројање од 0. 82 00:04:36,940 --> 00:04:39,390 >> Сада опет, ово је нешто које смо видели у прошлости 83 00:04:39,390 --> 00:04:42,500 и можемо поправити прилично лако. 84 00:04:42,500 --> 00:04:44,790 Али у овом случају, Такође је имао предност 85 00:04:44,790 --> 00:04:48,940 коришћења изјаву принтф директно унутар фор петље 86 00:04:48,940 --> 00:04:52,930 да зна тачно где та грешка се дешавало. 87 00:04:52,930 --> 00:04:55,150 Тако принтф изјаве врло корисни помазуци 88 00:04:55,150 --> 00:04:57,940 да одредите где, управо у изворни код, 89 00:04:57,940 --> 00:05:00,620 специфична грешка се дешава. 90 00:05:00,620 --> 00:05:03,650 >> И то је такође важно да схватимо да, као што смо писање кода, 91 00:05:03,650 --> 00:05:06,052 можда имамо претпоставке о стању програма. 92 00:05:06,052 --> 00:05:08,510 Или можда имамо претпоставке о томе шта део програма 93 00:05:08,510 --> 00:05:13,020 је заправо тачно или нетачно када касније као градимо на том програму 94 00:05:13,020 --> 00:05:15,950 и чине га дио једне сложен и већи програма 95 00:05:15,950 --> 00:05:19,700 да схватимо да неки аспект то је заправо луд. 96 00:05:19,700 --> 00:05:22,680 >> Користећи принтф може заиста помоћи сузити и идентификују 97 00:05:22,680 --> 00:05:26,430 региони програма који не може се тачно понаша на начин на који смо 98 00:05:26,430 --> 00:05:29,500 Очекујемо, на основу наших претпоставки. 99 00:05:29,500 --> 00:05:31,460 Али има и друге алате доступно, такође, 100 00:05:31,460 --> 00:05:34,860 да нам омогућити да покуша да слици где грешка се дешава 101 00:05:34,860 --> 00:05:39,930 Исто тако, конкретно, како ствари се дешавају унутар програма. 102 00:05:39,930 --> 00:05:41,990 >> Дакле, користећи иф веома корисно када желимо 103 00:05:41,990 --> 00:05:45,900 да идентификују специфичне области програм који имају неку грешку. 104 00:05:45,900 --> 00:05:47,730 Али такође постаје досадан након неког времена. 105 00:05:47,730 --> 00:05:50,500 У овом случају, ово је релативно једноставан програм 106 00:05:50,500 --> 00:05:52,750 са само једном или две променљиве. 107 00:05:52,750 --> 00:05:57,260 И то постаје врло лако за нас да одштампате вредност тих променљивих 108 00:05:57,260 --> 00:05:59,670 у контексту већег програма. 109 00:05:59,670 --> 00:06:02,670 >> Али можда има другачији Програм који има много варијабли. 110 00:06:02,670 --> 00:06:06,530 И то не може бити сасвим тако једноставан за коришћење принтф 111 00:06:06,530 --> 00:06:10,120 да покуша да процени шта се дешава за сваку од тих променљивих један 112 00:06:10,120 --> 00:06:13,590 док се програм извршава. 113 00:06:13,590 --> 00:06:16,960 Постоји програм који постоји назива отладчик програма. 114 00:06:16,960 --> 00:06:20,320 У овом случају, онај који ћемо Употреба је ГНУ Дебуггер, или ГДБ, 115 00:06:20,320 --> 00:06:24,260 који нам омогућава да прегледа унутрашњи деловање програма у много 116 00:06:24,260 --> 00:06:25,700 детаљан начин. 117 00:06:25,700 --> 00:06:28,810 >> Можемо да заправо извршава ГДБ из командне линије 118 00:06:28,810 --> 00:06:35,370 Овде једноставним куцањем ГДБ и команда која желимо да дебуг. 119 00:06:35,370 --> 00:06:37,550 У овом случају, рачунају. 120 00:06:37,550 --> 00:06:41,650 Сада у овом случају, можемо видети да је доводи нас у линији на којој пише ГДБ. 121 00:06:41,650 --> 00:06:44,020 И заиста можемо извршава команде ГДБ 122 00:06:44,020 --> 00:06:48,260 да стварно почне Извршење Програм, престани одређене тачке, 123 00:06:48,260 --> 00:06:51,060 проценити променљиве и прегледати променљиве које 124 00:06:51,060 --> 00:06:54,152 постоје у програму државе у том тренутку, 125 00:06:54,152 --> 00:06:55,110 и тако даље и тако даље. 126 00:06:55,110 --> 00:06:57,240 Она пружа много енергије за нас. 127 00:06:57,240 --> 00:06:59,960 >> Али то је само тако се дешава да ЦС50 ИДЕ такође 128 00:06:59,960 --> 00:07:05,870 даје ГУИ или корисника интерфејс за ГДБ који 129 00:07:05,870 --> 00:07:11,120 омогућава нам да то урадите без потребе интерфејс командне линије уопште 130 00:07:11,120 --> 00:07:13,560 или уопште чак. 131 00:07:13,560 --> 00:07:16,930 Начин на који могу приступити да је помоћу дугмета дебуг 132 00:07:16,930 --> 00:07:20,120 на самом врху ЦС50 ИДЕ. 133 00:07:20,120 --> 00:07:24,280 Сада у прошлости, оно што имамо види се да користите команду 134 00:07:24,280 --> 00:07:27,660 линија за састављање и покрените програм. 135 00:07:27,660 --> 00:07:29,790 >> Дугме дебуг ради оба од ових корака. 136 00:07:29,790 --> 00:07:34,380 Али такође ће подигни дебагер језичак на крајњој десној страни 137 00:07:34,380 --> 00:07:38,280 који нам омогућава да прегледају различите особина програма 138 00:07:38,280 --> 00:07:40,500 како је извршава. 139 00:07:40,500 --> 00:07:44,280 Ако кликнете дебуг, у овом случај, то ће довести до 140 00:07:44,280 --> 00:07:48,230 нова картица у конзоли прозор на самом дну. 141 00:07:48,230 --> 00:07:51,160 >> И можете да видите да је ово картица има неке информације на самом врху. 142 00:07:51,160 --> 00:07:52,670 И ми у великој мери можемо да игноришемо ово. 143 00:07:52,670 --> 00:07:54,800 Али једна од ствари да желимо да приметите 144 00:07:54,800 --> 00:07:57,170 је да даје иста ствар коју смо 145 00:07:57,170 --> 00:08:03,000 би добили ако бисмо покушали да тече направи на Ц програм у терминалу. 146 00:08:03,000 --> 00:08:06,230 >> Овде можемо видети да је покренут Цланг, и има разне заставе, 147 00:08:06,230 --> 00:08:12,660 и то је састављање наше цоунт.ц фајл, што је био изабрана картица у то време 148 00:08:12,660 --> 00:08:15,100 да сам погодио дебуг. 149 00:08:15,100 --> 00:08:18,010 Дакле, ово је веома користан јер сада користи ово дугме дебуг, 150 00:08:18,010 --> 00:08:23,280 можемо истовремено може саставити и онда изврши програм који смо заправо 151 00:08:23,280 --> 00:08:24,460 желите да покренете. 152 00:08:24,460 --> 00:08:27,880 >> Једну од застава то јест важно, у овом случају, 153 00:08:27,880 --> 00:08:30,190 Ми смо заправо смо користили најдуже 154 00:08:30,190 --> 00:08:32,450 али само сам мало руку машући [неразумљиво], која 155 00:08:32,450 --> 00:08:33,820 је овај овде. 156 00:08:33,820 --> 00:08:35,790 У кланг, пише -ггдб3. 157 00:08:35,790 --> 00:08:38,570 158 00:08:38,570 --> 00:08:41,250 У овом случају, оно што смо говори кланг, наш преводилац, 159 00:08:41,250 --> 00:08:43,820 је да желимо да састави наш програм. 160 00:08:43,820 --> 00:08:46,810 Али такође пружају оно што су назива информације симбол 161 00:08:46,810 --> 00:08:50,940 тако да је преводилац заправо има приступ да много основне информације 162 00:08:50,940 --> 00:08:52,610 садржан у оквиру програма. 163 00:08:52,610 --> 00:08:55,260 >> Конкретније, број функција које имам, 164 00:08:55,260 --> 00:08:58,000 имена тих функција, променљиве, типови 165 00:08:58,000 --> 00:09:01,730 да су те варијабле су и разноврсне других ствари које помажу у дебуггер 166 00:09:01,730 --> 00:09:04,350 обавља своју делатност. 167 00:09:04,350 --> 00:09:06,600 Сада има још нешто То је важно напоменути 168 00:09:06,600 --> 00:09:10,280 када говоримо о руннинг програм на овај начин. 169 00:09:10,280 --> 00:09:13,660 >> Приметите да заправо има одрастао нову картицу у нашој конзоли 170 00:09:13,660 --> 00:09:14,780 дуж дну. 171 00:09:14,780 --> 00:09:18,600 Ми више не морају да комуницирају директно са прозор терминала. 172 00:09:18,600 --> 00:09:21,420 Али ово је нова картица заправо прозор терминала. 173 00:09:21,420 --> 00:09:26,710 Само је специфичан за трчање програм који смо створили. 174 00:09:26,710 --> 00:09:29,270 >> Приметите да на дну, у комбинација са неким излазом 175 00:09:29,270 --> 00:09:33,500 од цланг преводилац и ГДБ, који смо у великој мери могу да игноришу, 176 00:09:33,500 --> 00:09:37,570 заправо показује излаз наш програм на самом дну. 177 00:09:37,570 --> 00:09:41,240 Сада је важно схватити да је ово један прозор у ствари 178 00:09:41,240 --> 00:09:43,360 ће вам показати излаз из вашег програма 179 00:09:43,360 --> 00:09:47,190 али такође може да прихвати унос за тај програм, такође. 180 00:09:47,190 --> 00:09:49,260 >> Тако обавештење да каже унесите број, 181 00:09:49,260 --> 00:09:53,050 што је исто излаз који смо имали имали у терминал прозору раније. 182 00:09:53,050 --> 00:09:55,510 Али то је сада приказано на овој новој картици. 183 00:09:55,510 --> 00:09:56,550 Могу улаз број. 184 00:09:56,550 --> 00:10:00,900 И то је заправо хоће функционишу као очекујемо 185 00:10:00,900 --> 00:10:05,890 показујући нам нашу дебуг оутпут, излаз који може бити луд, 186 00:10:05,890 --> 00:10:07,010 као што смо раније видели. 187 00:10:07,010 --> 00:10:10,460 И на самом дну, то заправо има неке додатне излаз 188 00:10:10,460 --> 00:10:14,550 од БДП-а само кажем да овај програм је завршен. 189 00:10:14,550 --> 00:10:16,655 >> Сада као што сте видели у овом Посебно пролазе кроз, 190 00:10:16,655 --> 00:10:19,370 није био посебно корисно јер чак и 191 00:10:19,370 --> 00:10:23,740 иако смо имали доћи дебагер мени горе, ово је још увек трчање програма. 192 00:10:23,740 --> 00:10:26,790 Ни у једном тренутку то урадио ствари паусе извршење за нас 193 00:10:26,790 --> 00:10:30,767 бити у стању да прегледа све променљиве садржане у. 194 00:10:30,767 --> 00:10:32,850 Има још нешто да морамо да урадимо како 195 00:10:32,850 --> 00:10:36,910 да ГДБ да признају да желимо за паузирање извршење програма 196 00:10:36,910 --> 00:10:42,820 и не само дозволити да настави нормално као што би у сваком другом случају. 197 00:10:42,820 --> 00:10:45,530 >> Да би то паусе извршење, у одређеној линији, 198 00:10:45,530 --> 00:10:47,830 морамо да створимо што је назива бреак поинт. 199 00:10:47,830 --> 00:10:52,670 И прекид тачка веома лако направљена У овом ЦС50 ИДЕ узимајући миша 200 00:10:52,670 --> 00:10:57,090 и кликом директно на лево неке специфични број линије. 201 00:10:57,090 --> 00:10:59,920 Када сам то урадио, црвена тачка Изгледа, што указује 202 00:10:59,920 --> 00:11:02,300 да је линија је сада пауза тачка. 203 00:11:02,300 --> 00:11:07,540 >> И следећи пут када сам покренути ГДБ га, ће се зауставити извршење у те прекретнице 204 00:11:07,540 --> 00:11:10,280 када достигне ту линију кода. 205 00:11:10,280 --> 00:11:12,230 Ово је важан ствар да схвате 206 00:11:12,230 --> 00:11:16,140 да то није нужно Случај да свака линија кода 207 00:11:16,140 --> 00:11:17,880 је заправо доступна. 208 00:11:17,880 --> 00:11:23,780 Ако бих да се створи функцију овде, за екампле-- воид ф-- 209 00:11:23,780 --> 00:11:31,230 и само уради за штампање линију овде-- здраво ворлд-- ако никада назвати ову функцију, 210 00:11:31,230 --> 00:11:34,770 то ће бити случај да, ако подесите брејк овде, 211 00:11:34,770 --> 00:11:36,220 функција никада неће бити позван. 212 00:11:36,220 --> 00:11:38,310 И зато, овај Посебно бреак поинт 213 00:11:38,310 --> 00:11:43,040 никада неће заиста паузирати извршење програма. 214 00:11:43,040 --> 00:11:48,020 >> Па рецимо да сам добро створити прекид тачка на некој линији кода 215 00:11:48,020 --> 00:11:50,340 који ће заправо бити погубљен. 216 00:11:50,340 --> 00:11:53,470 Сада, у овом случају, то је Први ред у основну функцију. 217 00:11:53,470 --> 00:11:56,630 Дакле, то ће сигурно бити случај да, чим почне извршење, 218 00:11:56,630 --> 00:11:58,580 сама прва линија ће бити постигнут. 219 00:11:58,580 --> 00:12:00,230 ГДБ ће паузирати извршење. 220 00:12:00,230 --> 00:12:04,100 А онда, ја ћу бити у стању да интеракцију са дебагером. 221 00:12:04,100 --> 00:12:08,480 >> Можете подесити више линије као Бреакпоинтс, ако желите. 222 00:12:08,480 --> 00:12:11,365 Такође, можете да креирате линију до овде у овом сегменту кода 223 00:12:11,365 --> 00:12:12,490 које никада неће бити постигнут. 224 00:12:12,490 --> 00:12:14,744 И можемо поставити један у даљем тексту. 225 00:12:14,744 --> 00:12:16,660 Разлог због којег бисмо желите да урадите ово ћемо 226 00:12:16,660 --> 00:12:19,119 иду у мало више детаљ за који тренутак. 227 00:12:19,119 --> 00:12:21,660 Дакле, за сада, дозволите ми да искључите ови додатни брејк 228 00:12:21,660 --> 00:12:24,940 тако да можемо да погледамо шта се дешава када имам једну паузу 229 00:12:24,940 --> 00:12:27,650 тачка у мом програму. 230 00:12:27,650 --> 00:12:29,410 Направио сам неке промене овог програма. 231 00:12:29,410 --> 00:12:30,750 Зато треба да га спаси. 232 00:12:30,750 --> 00:12:34,490 Ја ћу кликните дебуг тако да могу бегин компилацију, а онда 233 00:12:34,490 --> 00:12:36,880 извршење дебагером. 234 00:12:36,880 --> 00:12:40,632 >> Видећемо да, после тренутака, Линија која смо одабрали као паузе 235 00:12:40,632 --> 00:12:43,360 поента је истакнут жутом бојом. 236 00:12:43,360 --> 00:12:47,440 Такође можемо приметити да је у горњи десни у дебуг панелу 237 00:12:47,440 --> 00:12:50,940 да је икона пауза је укључен у малу икону игре. 238 00:12:50,940 --> 00:12:54,710 То значи да имамо паузу извршење, у овом конкретном случају. 239 00:12:54,710 --> 00:12:57,840 И ударање на дугме Плаи би нам омогућити да настави извршење 240 00:12:57,840 --> 00:13:00,000 у том одређене тачке. 241 00:13:00,000 --> 00:13:03,240 >> Обратите пажњу да постоји неколико других Тастери доступни у овом панелу, дебуг 242 00:13:03,240 --> 00:13:04,220 kao. 243 00:13:04,220 --> 00:13:09,470 Корак преко, који ми омогућава да изврши ту једну линију кода 244 00:13:09,470 --> 00:13:14,030 и корак преко те линије до следеци, која, у овом случају, 245 00:13:14,030 --> 00:13:17,060 би значило да је принтф Изјава се извршава. 246 00:13:17,060 --> 00:13:22,310 И то ће онда стани извршење он лине 13, овако. 247 00:13:22,310 --> 00:13:25,090 >> А ту је и корак у функцију, која 248 00:13:25,090 --> 00:13:28,950 је корисно ако сам створио други Функције другде у изворном коду. 249 00:13:28,950 --> 00:13:31,420 И желим да закорачите у те функције пре него 250 00:13:31,420 --> 00:13:33,050 изврши ту функцију у целини. 251 00:13:33,050 --> 00:13:37,279 Али ћемо погледати још у фази у функцију у само тренутак. 252 00:13:37,279 --> 00:13:40,320 Сада обратите пажњу на неке друге ствари које заиста постоје у овом дебуг панела. 253 00:13:40,320 --> 00:13:44,110 >> Имамо овај панел под називом Цалл Стацк, која нам показује 254 00:13:44,110 --> 00:13:45,300 Где смо ми. 255 00:13:45,300 --> 00:13:48,550 У овом случају, ми смо унутра главног функције. 256 00:13:48,550 --> 00:13:50,880 Наш скрипта се зове цоунт.ц. 257 00:13:50,880 --> 00:13:53,820 И ми се деси да буде на линија 13, колона, она која 258 00:13:53,820 --> 00:13:58,950 је управо оно што је истакао област изворног кода указује, као добро. 259 00:13:58,950 --> 00:14:02,435 >> Сада обратите пажњу да ово показује под локалном променљиве секције 260 00:14:02,435 --> 00:14:06,710 све варијабле које постоје у оквиру ове функције. 261 00:14:06,710 --> 00:14:08,930 Важно је напоменути да су сви варијабли 262 00:14:08,930 --> 00:14:12,580 ће се појавити у овој локалној променљивој секција у оквиру функције, 263 00:14:12,580 --> 00:14:14,380 чак и пре него што се дефинишу. 264 00:14:14,380 --> 00:14:19,160 Овде се види да имамо променљиву Број назвао, има неку вредност од 0, 265 00:14:19,160 --> 00:14:21,280 и то је типа инт. 266 00:14:21,280 --> 00:14:24,110 >> Пре него што заправо инитиализе свих ових варијабли, 267 00:14:24,110 --> 00:14:26,685 нисмо нужно гарантовано да види вредност 0. 268 00:14:26,685 --> 00:14:29,200 И у зависности од друга погубљења да сте извршили 269 00:14:29,200 --> 00:14:32,020 и стање вашег сећања када је ви заправо покренути овај програм, 270 00:14:32,020 --> 00:14:34,605 можда откријете да Не видим вредности 0 271 00:14:34,605 --> 00:14:36,550 и, уместо тога, неке друге луде бројева. 272 00:14:36,550 --> 00:14:38,390 >> Али не брините о томе. 273 00:14:38,390 --> 00:14:44,610 Неће бити релевантни до заправо иницијализујете вредност. 274 00:14:44,610 --> 00:14:49,630 Сада у овом случају, можемо видети да Ја сам обављао неке резултате. 275 00:14:49,630 --> 00:14:52,131 И ја, управо сада, застао извршење. 276 00:14:52,131 --> 00:14:53,880 Али у овом случају, оно што Ја стварно желим да радим 277 00:14:53,880 --> 00:14:58,060 је сада корак преко ове линије кода тако да сам заправо могу 278 00:14:58,060 --> 00:15:04,390 упита корисника за тај инт који желимо да користимо у нашем програму. 279 00:15:04,390 --> 00:15:07,060 >> Сада у овом случају, када Ударио сам корак изнад, обавештење 280 00:15:07,060 --> 00:15:11,940 да Пауза или радије Настави тастер је промењен у овом дугме Паусе 281 00:15:11,940 --> 00:15:14,022 јер овај код заправо извршава. 282 00:15:14,022 --> 00:15:15,730 Šta se dešava сада је да је 283 00:15:15,730 --> 00:15:21,630 чека нас унос неке информације као што можемо видети наше излаза текст 284 00:15:21,630 --> 00:15:23,600 на самом дну. 285 00:15:23,600 --> 00:15:25,787 >> Тако сада, ово је заправо није застао, 286 00:15:25,787 --> 00:15:28,620 чак томе, јер на неки начин, појављује да је због ништа се не догађа. 287 00:15:28,620 --> 00:15:32,360 Али то је само тако се дешава да се у мој специфичан случај он лине 13, 288 00:15:32,360 --> 00:15:34,210 Чекам корисника унос. 289 00:15:34,210 --> 00:15:39,130 И тако ГДБ није у стању да прегледа програм као што је трчање. 290 00:15:39,130 --> 00:15:43,370 >> Сада следећи пут да унесете неки инпут-- тако да ћу ући тај број 5, 291 00:15:43,370 --> 00:15:46,140 као што смо видели у паст-- ударио Ретурн, а ми 292 00:15:46,140 --> 00:15:51,430 Приметићете да одмах, ГДБ паузе и, опет, истиче следећу линију. 293 00:15:51,430 --> 00:15:55,320 Али приметио да сада, као резултат нашег унос вредности, 294 00:15:55,320 --> 00:15:58,930 унапредили смо ту вредност у наших локалних променљивих, које 295 00:15:58,930 --> 00:16:05,560 је веома корисно знати прецизно шта је тај број био у меморији. 296 00:16:05,560 --> 00:16:10,650 >> Сада могу дозволити овај програм да настави играју до краја његовог извршења 297 00:16:10,650 --> 00:16:12,570 ударајући Настави. 298 00:16:12,570 --> 00:16:16,410 Можемо да видимо врло брзо Да ли програм финиш извршења 299 00:16:16,410 --> 00:16:19,790 са истог излаза који смо имали пре, за отклањање грешака затвара, 300 00:16:19,790 --> 00:16:23,170 а сада овај програм је потпуно обустављена. 301 00:16:23,170 --> 00:16:25,320 >> Ја показују да само за Сврха видим шта 302 00:16:25,320 --> 00:16:27,280 се дешава када смо заправо ударио Настави. 303 00:16:27,280 --> 00:16:30,640 Али ми заправо ћемо Желим да се вратим у овај програм 304 00:16:30,640 --> 00:16:33,820 тако да можемо да покушамо да дебуг управо оно што се дешава. 305 00:16:33,820 --> 00:16:37,980 Сада када сам користећи дебагер, могу Не треба те дебуг принтф изјаве. 306 00:16:37,980 --> 00:16:43,860 >> Тако сам могао да их уклоне јер ћу учинити сада само да се вратимо на нашу једноставнији код 307 00:16:43,860 --> 00:16:45,950 да смо имали пре неколико тренутака. 308 00:16:45,950 --> 00:16:48,790 Сада када сам спасити програмирање и извршавање га, 309 00:16:48,790 --> 00:16:53,700 то ће, опет, иде у том почетном брејк који сам имао на линији 11. 310 00:16:53,700 --> 00:16:57,700 А ја ћу бити у могућности да провери моје варијабле као што желим да радим. 311 00:16:57,700 --> 00:17:00,695 >> Десило се да је ово Део није веома интересантно, 312 00:17:00,695 --> 00:17:04,364 И знам да ћу да одштампате ову изјаву. 313 00:17:04,364 --> 00:17:05,280 Молимо вас да унесете број. 314 00:17:05,280 --> 00:17:08,099 А онда, знам да ћу да пита корисника за тај цео број. 315 00:17:08,099 --> 00:17:13,329 Па, можда, ја заправо желим да померим Поинт Бреак мало ниже. 316 00:17:13,329 --> 00:17:16,710 >> Можете уклонити брејк тако што ћете кликнути, опет, непосредно 317 00:17:16,710 --> 00:17:18,460 лево од тог броја линије. 318 00:17:18,460 --> 00:17:22,200 То црвена тачка ће нестати, што указује да је пауза тачка је нестао. 319 00:17:22,200 --> 00:17:24,780 Сада у овом случају, извршење је заустављена. 320 00:17:24,780 --> 00:17:27,770 И тако није заправо догађа на наставити у том конкретном случају. 321 00:17:27,770 --> 00:17:30,210 Али ја могу поставити паузу тачка а мало касније. 322 00:17:30,210 --> 00:17:33,880 >> И када сам сада наставити мој код, то ће се наставити и рећи 323 00:17:33,880 --> 00:17:36,190 поента те прекретнице. 324 00:17:36,190 --> 00:17:37,374 Опет, ја ударио Настави. 325 00:17:37,374 --> 00:17:39,040 Чини ми се да ништа се не догађа. 326 00:17:39,040 --> 00:17:41,450 Али то је зато што је мој Код чека за унос. 327 00:17:41,450 --> 00:17:47,900 Ја ћу ући у број 5, притисните Ентер, и Сада следећа пауза тачка ће бити хит. 328 00:17:47,900 --> 00:17:50,570 >> Сада у овом случају, то је линија кода 329 00:17:50,570 --> 00:17:53,820 да, пре него што смо знали Десило се да Бугги. 330 00:17:53,820 --> 00:17:57,590 Дакле, хајде да процени шта се дешава у овом тренутку. 331 00:17:57,590 --> 00:18:02,620 Када је линија је истакнуто, ово линија још увек није извршена. 332 00:18:02,620 --> 00:18:06,490 Дакле, у овом случају, можемо видети да имам неки број, који 333 00:18:06,490 --> 00:18:11,610 Имам цео под називом Број који има вредност 5. 334 00:18:11,610 --> 00:18:15,090 И ја ћу се обављање мало математике на том броју. 335 00:18:15,090 --> 00:18:20,130 >> Ако корак преко тога, можемо приметити да су вредности нум 336 00:18:20,130 --> 00:18:23,780 није променило у складу са аритметика да смо заправо урадили. 337 00:18:23,780 --> 00:18:26,810 И сада када смо унутар ове петље за 338 00:18:26,810 --> 00:18:29,090 или сада када је за петљу Сама је истакао, 339 00:18:29,090 --> 00:18:32,450 видимо да имамо нови променљива сам позвао да 340 00:18:32,450 --> 00:18:35,370 биће користити у да за петљу. 341 00:18:35,370 --> 00:18:38,230 >> Сада се сетим Пре тога сам напоменути да понекад си 342 00:18:38,230 --> 00:18:43,470 да видим неку луд бројеви као подразумевано пре тог броја 343 00:18:43,470 --> 00:18:45,530 или да променљива Заправо инитиализед. 344 00:18:45,530 --> 00:18:49,040 Можемо тачно видети да овде у овом променљиве 345 00:18:49,040 --> 00:18:51,345 Звао сам, која нема још није инитиализед 346 00:18:51,345 --> 00:18:53,560 у време истицања. 347 00:18:53,560 --> 00:18:57,070 Али можемо видјети да има неки број да не би заправо очекивали. 348 00:18:57,070 --> 00:18:57,620 >> To je ok. 349 00:18:57,620 --> 00:18:59,661 Не брини о томе јер имамо заправо није 350 00:18:59,661 --> 00:19:04,970 инитиализед тај број до И корак преко ове линије и вредности 351 00:19:04,970 --> 00:19:08,560 И је иницијализује на вредност 1. 352 00:19:08,560 --> 00:19:11,400 Дакле, да видим да је то у ствари случај, идемо корак готова. 353 00:19:11,400 --> 00:19:14,420 Сада се види да је линија је извршена. 354 00:19:14,420 --> 00:19:17,000 И сада истицање ово иф линија. 355 00:19:17,000 --> 00:19:22,230 >> А сада да видимо како наше вредности И и 3 су се променила током времена. 356 00:19:22,230 --> 00:19:26,450 Ово је веома корисно да се уради, у ствари, је на корак преко линије у више наврата. 357 00:19:26,450 --> 00:19:30,480 И можете наћи шта је заправо дешава унутар вашег петље за 358 00:19:30,480 --> 00:19:33,660 и каква је ситуација варијабле унутар тог фор петље 359 00:19:33,660 --> 00:19:39,200 као да се извршење програма јавља један корак по корак. 360 00:19:39,200 --> 00:19:41,110 >> Сада у овом тренутку, ја прешли довољно 361 00:19:41,110 --> 00:19:44,210 да сам сада на крају мог програма. 362 00:19:44,210 --> 00:19:46,980 Ако корак преко тога, он ће заправо престаје извршење 363 00:19:46,980 --> 00:19:48,860 као што смо видели у прошлости. 364 00:19:48,860 --> 00:19:52,110 Дозволите ми да поново ово, опет, тако да могу указати нешто друго од, 365 00:19:52,110 --> 00:19:53,320 kao. 366 00:19:53,320 --> 00:19:55,350 >> У овом случају, то је Сада ме питате, опет, 367 00:19:55,350 --> 00:19:57,100 за број, који Ја ћу, опет, ентер. 368 00:19:57,100 --> 00:20:00,300 Али овај пут ћу да уђу у већи број тако да је за петљу 369 00:20:00,300 --> 00:20:02,540 ће поновити више пута. 370 00:20:02,540 --> 00:20:06,090 У том случају, ја ћу да унесете вредности од 11. 371 00:20:06,090 --> 00:20:08,390 >> Сада поново јер бих сет прекид тачка на линији 15, 372 00:20:08,390 --> 00:20:10,490 то ће да истакне ту линију. 373 00:20:10,490 --> 00:20:12,980 Видимо да је наш број 11 је исправно 374 00:20:12,980 --> 00:20:15,560 заступљене у нашим локалним варијабли. 375 00:20:15,560 --> 00:20:22,460 Степпинг преко тога, можемо сада ватцх шта се дешава са нашим вредности И 376 00:20:22,460 --> 00:20:25,680 као што наставимо унутар ово петље. 377 00:20:25,680 --> 00:20:31,960 Обично се повећава сваки пут кад достигну врх који за петље. 378 00:20:31,960 --> 00:20:35,110 >> Сада једна од ствари која би могла било корисно да ураде током извршења 379 00:20:35,110 --> 00:20:40,490 овог програма је за мене да заиста промените варијабли средњи ток да видим 380 00:20:40,490 --> 00:20:42,450 шта се дешава са мојим програмом. 381 00:20:42,450 --> 00:20:46,540 У том случају, заправо могу двапут кликните на вредност. 382 00:20:46,540 --> 00:20:48,040 Обратите пажњу да постане текст поље. 383 00:20:48,040 --> 00:20:50,280 >> Сада могу ући другачији ценимо потпуно 384 00:20:50,280 --> 00:20:55,700 да видим како мој програм понаша када сам променио ту променљиву. 385 00:20:55,700 --> 00:20:59,560 Сада у овом случају, променљива И сада садржи вредност 10. 386 00:20:59,560 --> 00:21:02,810 Али програм је још увек застаде у извршењу. 387 00:21:02,810 --> 00:21:07,610 Када сам корак више, видим да је вредност Ја, који сам ушао као 10., 388 00:21:07,610 --> 00:21:12,170 није већа од вредности нум, која је одмах изазива фор петље 389 00:21:12,170 --> 00:21:14,240 да се заустави извршење. 390 00:21:14,240 --> 00:21:16,210 >> Сада то није једини Разлог зашто би 391 00:21:16,210 --> 00:21:19,450 Желим да измени променљиву у месту. 392 00:21:19,450 --> 00:21:22,210 Ти заправо можда ћете желети да покушамо да га модификује тако 393 00:21:22,210 --> 00:21:24,590 да можете наставити извршење петље 394 00:21:24,590 --> 00:21:27,370 или тако да можете изменити нека вредност пре тога 395 00:21:27,370 --> 00:21:32,630 достигне неки посебан скуп аритметике да сте о да изврши. 396 00:21:32,630 --> 00:21:36,210 >> Дакле, сада када смо у ствари промијенити вредност ја као програм је извршавање, 397 00:21:36,210 --> 00:21:39,540 то је изазвало фор петље да одустане прерано јер одједном, ја 398 00:21:39,540 --> 00:21:42,770 се случајно већа од вредности од цилиндра, што значи да је за петљу 399 00:21:42,770 --> 00:21:45,410 не треба да се изврши. 400 00:21:45,410 --> 00:21:48,780 Даље, то се десило да је случај који смо променили вредност од И 401 00:21:48,780 --> 00:21:53,270 када је истакнута линија 17, што је тачка у времену 402 00:21:53,270 --> 00:21:56,280 да је за извршење петље заправо се оцењује. 403 00:21:56,280 --> 00:22:00,210 >> Да сам променила вредност сам на другој линији, рецимо 19, 404 00:22:00,210 --> 00:22:03,360 ми би смо видели другачији Понашање јер линија 19 би 405 00:22:03,360 --> 00:22:08,310 су погубљени пре петље Услов је реевалуира. 406 00:22:08,310 --> 00:22:11,900 Сада у овом тренутку, ја сам, опет, на крају овог програма. 407 00:22:11,900 --> 00:22:15,707 И могу дозволити да се то настави на дозволите ми програм за природно отказ. 408 00:22:15,707 --> 00:22:18,290 Али постоји неколико ствари који су важни за понети 409 00:22:18,290 --> 00:22:19,960 из овог конкретног разговора. 410 00:22:19,960 --> 00:22:22,490 Морате да се процени твоји претпоставке 411 00:22:22,490 --> 00:22:24,710 о томе како код треба да се понаша. 412 00:22:24,710 --> 00:22:28,220 Сваки пут када мислите да неки комад о код знате деси да радите, 413 00:22:28,220 --> 00:22:30,940 можда је црвена застава да иде назад и проценити, и будите сигурни 414 00:22:30,940 --> 00:22:33,470 да ваше претпоставком како то функционише код 415 00:22:33,470 --> 00:22:38,290 је заправо истина да како је изражена у вашем изворном коду. 416 00:22:38,290 --> 00:22:41,300 >> Али, чак и више тачке био, када се користи за отклањање грешака, 417 00:22:41,300 --> 00:22:43,920 можете ставити на бреакпоинт различитих линија кода, 418 00:22:43,920 --> 00:22:48,110 што ће проузроковати дебуггер до паусе извршење на сваком од тих линија 419 00:22:48,110 --> 00:22:52,210 тако да можете оцијенили меморија или чак га променити у месту. 420 00:22:52,210 --> 00:22:55,630 И опет, сетите се да можете креирати више бреакпоинт тако да 421 00:22:55,630 --> 00:23:00,390 може да настави извршење, скип над великим деловима кода, 422 00:23:00,390 --> 00:23:04,790 и аутоматски ће паузирати током следеће паузе тачку. 423 00:23:04,790 --> 00:23:07,760 >> Заправо напреднији Нема карактеристике дебагера, као добро. 424 00:23:07,760 --> 00:23:10,170 Али мораћемо да вас упутим неким каснијим видео 425 00:23:10,170 --> 00:23:14,090 како би се заиста измамио осим како да користе те посебне функције. 426 00:23:14,090 --> 00:23:15,990 За сада, хвала много за гледање. 427 00:23:15,990 --> 00:23:18,080 И срећно отклањање грешака.