1 00:00:00,000 --> 00:00:00,309 2 00:00:00,309 --> 00:00:02,350 [? ДАН ARMADARAS:] Здраво, Јас сум [? Дан Armadaras?]. 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 во рамките на CS50 ИРО, што овозможуваат лесно debug програма. 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, имаме printf оваа функција, 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 може да има некои debug извештаи, каде што 50 00:02:42,300 --> 00:02:46,970 може да се обиде да дознаам она што се случува во внатрешноста на нашиот код. 51 00:02:46,970 --> 00:02:51,210 >> Значи во овој случај, јас ќе printf со таг дебагирање. 52 00:02:51,210 --> 00:02:53,540 Во овој случај, тоа е само низа debug 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 Па јас би можеле да го користите printf пред и после тоа линија код. 59 00:03:16,224 --> 00:03:18,640 Во овој случај, јас дури би можеле направи тоа малку повеќе јасно 60 00:03:18,640 --> 00:03:21,960 велејќи debug пред и debug по толку 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 ние сакаме да се заокружи up-- потоа ние би можеле да знаат дека ние би можеле 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 на користење на изјавата на printf директно во внатрешноста на за телефонска линија 86 00:04:48,940 --> 00:04:52,930 да се знае точно каде дека грешка е што се случуваат. 87 00:04:52,930 --> 00:04:55,150 Па printf извештаи се многу корисна во помагањето 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 >> Користење printf навистина може да помогне стесните и да ги идентификува 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 >> Па со користење printf е многу корисно кога сакаме 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 И тоа не може да биде доста така лесно да го користите printf 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 Во овој случај, онаа која ние ќе употреба е дебагерот GNU или GDB, 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 >> Ние всушност може да се изврши GDB од командната линија 118 00:06:28,810 --> 00:06:35,370 тука со едноставно внесување на GDB и команда која сакаме да debug. 119 00:06:35,370 --> 00:06:37,550 Во овој случај, брои. 120 00:06:37,550 --> 00:06:41,650 Сега, во овој случај, може да се види дека тоа нè доведува до брза која вели gdb. 121 00:06:41,650 --> 00:06:44,020 И ние всушност може да извршување на команди за да GDB 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 >> Но, тоа само така се случува, дека ИРО CS50 исто така 128 00:06:59,960 --> 00:07:05,870 обезбедува GUI или корисник интерфејс за gdb дека 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 Начинот на кој што можам да пристапите дека е со користење на копчето debug 132 00:07:16,930 --> 00:07:20,120 во самиот врв на CS50 ИРО. 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 ќе се добие ако се обиде да се кандидира за да програмата C во терминален прозорец. 146 00:08:03,000 --> 00:08:06,230 >> Тука може да се види тоа е водење ѕвекот, и има голем број на знамиња, 147 00:08:06,230 --> 00:08:12,660 и тоа е составувањето нашите count.c датотека, кој бил одбран табот во времето 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 Во ѕвекот, таа вели -ggdb3. 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 со ѕвекот компајлерот и GDB, која во голема мера може да се игнорира, 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 да се добие GDB да се признае дека ние сакаме за да го паузирате извршување на програмата 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 И пауза точка е многу лесно да се создаде во овој CS50 ИРО со преземање на вашиот глушец 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 >> И следниот пат кога ќе ја извршите GDB тоа, ќе го запре извршувањето на таа брејк 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 Ако јас да се создаде функцијата до тука, за example-- неважечки f-- 209 00:11:23,780 --> 00:11:31,230 и само го прават печати линија here-- здраво world-- ако никогаш не сум се јавите на оваа функција, 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 GDB ќе паузира извршување. 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 Јас ќе кликнете debug, така што можам започне составувањето и потоа 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 Ние, исто така, може да се забележи дека во горниот десен во debug панел 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 И притискање на копчето PLAY ќе ни овозможи да продолжи со извршувањето 240 00:12:57,840 --> 00:13:00,000 во тој одреден момент. 241 00:13:00,000 --> 00:13:03,240 >> Забележите дека има неколку други копчињата на располагање во овој debug панел, 242 00:13:03,240 --> 00:13:04,220 исто така. 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 би значело дека на printf изјава се извршува. 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 Сега забележите некои други работи кои навистина постојат во рамките на оваа debug панел. 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 Нашиот скрипта се нарекува count.c. 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 и тоа е од тип int. 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 дека Пауза или, поточно, Resume копче за да го смени ова копче за пауза 281 00:15:11,940 --> 00:15:14,022 затоа што овој код е всушност извршување. 282 00:15:14,022 --> 00:15:15,730 Што се случува во моментов е дека тоа е 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 И така GDB не е во можност да се испита програма како што се работи. 290 00:15:39,130 --> 00:15:43,370 >> Сега следниот пат гледам дека влегуваме во некој input-- па јас ќе го внесете тој број 5, 291 00:15:43,370 --> 00:15:46,140 како што видовме во past-- погоди Врати, а ние 292 00:15:46,140 --> 00:15:51,430 забележи дека, веднаш, GDB паузи и, повторно, нагласува следната линија. 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 така што можеме да се обидеме да се debug токму она што се случува. 305 00:16:33,820 --> 00:16:37,980 Сега дека јас сум со користење на дебагерот, јас може да не треба овие debug printf извештаи. 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 наречен i, што не е уште не е иницијализиран 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 >> Во ред е. 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 I е иницијализиран на вредност 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 И ние сме сега истакнување printf оваа линија. 355 00:19:17,000 --> 00:19:22,230 >> А сега можеме да видиме како нашите вредности на i и 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 исто така. 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 ќе iterate повеќе пати. 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 Повлекува во текот на овој, сега можеме види она што се случува со нашите вредноста на i 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 Кога ќе се повлече во текот, гледам дека вредност i, што влегов како 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 >> Па сега дека ние всушност ја менува вредноста на i како на програмата беше извршување, 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 Понатаму, тоа се случи да биде на Ако не го сменивме вредноста на i 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 И со среќа дебагирање.