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 IDE, які дозволяють Ви легко налагоджувати програму. 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 можливо, деякі налагодження заяви, де ми 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 У цьому випадку, це просто налагодження рядок 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 кажучи налагодження, перш ніж і відладки після так 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 і Команда, що ми хочемо, щоб налагодити. 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 IDE також 128 00:06:59,960 --> 00:07:05,870 надає графічний інтерфейс користувача або інтерфейс для 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 Таким чином, що я можу отримати доступ, що це за допомогою кнопки налагодження 132 00:07:16,930 --> 00:07:20,120 на самому верху CS50 IDE. 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 IDE, приймаючи вашу мишу 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 Я натисніть налагодження, так, що я можу почати компіляцію, а потім 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 І натиснувши кнопку Play буде дозволяють відновити виконання 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 так само. 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 Тепер зверніть увагу деякі інші речі, які насправді існують у цій налагодження панелі. 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 запросити користувача для цього Int, що ми хочемо використовувати в нашій програмі. 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 Що відбувається прямо зараз, що це 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-- удар Enter, і ми 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 так що ми можемо спробувати налагодження саме те, що відбувається. 305 00:16:33,820 --> 00:16:37,980 Тепер, коли я з допомогою відладчика, я можу не потрібні ці заяви налагодження 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 Так що, можливо, я насправді хочу, щоб поворушити Point Break трохи далі. 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, просто натисніть Enter і Тепер наступний момент перерви буде удар. 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 У мене є ціле число, зване Num, що має значення 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 ми бачимо, що у нас є новий Мінлива називається I, що 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 НЕ инициализирован це число до I крок на цю лінію, а значення 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 І ми зараз виділяючи це Printf лінії. 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 так само. 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 Переступивши через це, ми тепер можемо дивитися, що відбувається з нашою вартістю 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 Коли я переступити, я бачу, що Значення я, що я ввійшов до 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 Крім того, виявилося, був так, що ми змінили значення 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 І добре налагодження удачі.