1 00:00:00,000 --> 00:00:00,309 2 00:00:00,309 --> 00:00:02,350 [? DAN ARMADARAS :?] Ahoj, Som [? Dan Armadaras?]. 3 00:00:02,350 --> 00:00:04,410 Dnes sa budeme byť pri pohľade na ladenie. 4 00:00:04,410 --> 00:00:06,697 Nielen, že budeme hovoriť o niektorých technikách, 5 00:00:06,697 --> 00:00:09,280 ale tiež budeme pozerať na niektoré funkcie obsiahnuté 6 00:00:09,280 --> 00:00:14,170 v rámci CS50 IDE, ktoré umožňujú ľahko ladiť program. 7 00:00:14,170 --> 00:00:16,272 >> Len jeden príklad niečo, čo sa môže pokaziť 8 00:00:16,272 --> 00:00:18,730 a je to vlastne niečo že sme už videli skôr. 9 00:00:18,730 --> 00:00:23,200 V tomto prípade sa jedná o program, C ktorý prijíma celé číslo od užívateľa, 10 00:00:23,200 --> 00:00:27,580 rozdelí ju dva, a poskytuje výstup späť užívateľovi. 11 00:00:27,580 --> 00:00:30,610 Teraz z toho, čo sme videli, predtým v prednáškach, 12 00:00:30,610 --> 00:00:34,370 vieme, že to bude skutočne spôsobiť špecifické typy problémov divízie 13 00:00:34,370 --> 00:00:35,860 keď máme nepárne čísla. 14 00:00:35,860 --> 00:00:40,330 >> Konkrétne, budeme jednoducho vyhodiť za desatinnou čiarkou čokoľvek. 15 00:00:40,330 --> 00:00:43,170 Teraz vieme, že to sa stane byť prípad. 16 00:00:43,170 --> 00:00:47,430 A ak by sme ho spustiť, môžeme potvrdiť, naše podozrenie, prvý, kompilácií. 17 00:00:47,430 --> 00:00:50,460 A potom, spustením a zadávanie nepárny počet. 18 00:00:50,460 --> 00:00:51,720 >> To nie je nič nové. 19 00:00:51,720 --> 00:00:54,490 Ale to je vlastne Príkladom chybu, ktorá 20 00:00:54,490 --> 00:00:58,810 môžu existovať v rámci väčšieho programu že sa stáva ťažšie vystopovať. 21 00:00:58,810 --> 00:01:02,640 Aj keď vieme, čo je problém Je pravda, jadro veci 22 00:01:02,640 --> 00:01:06,250 by sa mohli pokúsiť identifikovať najmä ak dôjde k chybe, 23 00:01:06,250 --> 00:01:09,750 určenie toho, čo tento problém je, a potom ju opraviť. 24 00:01:09,750 --> 00:01:14,400 Takže Poskytujeme túto ako príklad z toho, čo by mohlo byť niečo 25 00:01:14,400 --> 00:01:19,030 že už vieme, ale môžu byť pochovaný v rámci iných prvkov kódu. 26 00:01:19,030 --> 00:01:23,090 >> Takže otvorením tohto ďalšieho zdroja kód súbor ako príklad, 27 00:01:23,090 --> 00:01:27,165 Toto rozdelenie problém je teraz súčasťou širšieho programu. 28 00:01:27,165 --> 00:01:29,040 Napriek tomu by mohlo byť trochu bit neprirodzený, a my 29 00:01:29,040 --> 00:01:31,076 by mohol byť schopný ľahko identifikovať, najmä 30 00:01:31,076 --> 00:01:32,450 od tej doby sme len diskutovať o tomto. 31 00:01:32,450 --> 00:01:38,250 Ale môžeme prísť na to, že tento Problém môže existovať vo väčšom meradle. 32 00:01:38,250 --> 00:01:45,450 >> Ak by som to kompilácie a teraz spustite ho, zadajte nepárne číslo, 33 00:01:45,450 --> 00:01:49,816 môžeme vidieť, že nebudeme mať presne výstup, že môžeme očakávať. 34 00:01:49,816 --> 00:01:51,690 V tomto konkrétnom prípade, môžeme povedať, že sme 35 00:01:51,690 --> 00:01:56,060 chcete spočítať všetky čísla od jedného do určitej konkrétne číslo. 36 00:01:56,060 --> 00:01:58,130 A my môžeme vidieť, že sme majú rad problémov 37 00:01:58,130 --> 00:02:03,880 tu, ak budeme výstup, jednoducho, 0 a 1, keď sme poskytujú vstup 5. 38 00:02:03,880 --> 00:02:07,380 >> Takže už vieme, že tam je tu problém. 39 00:02:07,380 --> 00:02:11,662 Ale my sa nemusí presne vedieť, kde tento problém skutočne existuje. 40 00:02:11,662 --> 00:02:13,620 Teraz jeden zo spôsobov, sa môžeme pokúsiť opraviť 41 00:02:13,620 --> 00:02:15,745 je niečo, čo máme už bol predstavený. 42 00:02:15,745 --> 00:02:18,880 Môžeme stačí použiť vo väčšom meradle. 43 00:02:18,880 --> 00:02:21,680 >> Na riadku 14, máme táto funkcia printf, 44 00:02:21,680 --> 00:02:25,620 čo nám umožňuje vytlačiť štátu z rôznych informácií. 45 00:02:25,620 --> 00:02:28,880 A to je niečo, čo vás by mal využiť v rámci svojho programu 46 00:02:28,880 --> 00:02:33,100 aby sa pokúsili zistiť, čo presne je sa deje v rôznych riadkov kódu. 47 00:02:33,100 --> 00:02:36,350 Takže aj keď to nie je Konečný výstup, že sme vlastne 48 00:02:36,350 --> 00:02:39,830 chcú vyrábať z tento program, stále 49 00:02:39,830 --> 00:02:42,300 môže mať nejaké ladenie Vyhlásenie kde sme 50 00:02:42,300 --> 00:02:46,970 môže pokúsiť sa zistiť, čo presne sa deje vo vnútri nášho kódu. 51 00:02:46,970 --> 00:02:51,210 >> Takže v tomto prípade, budem printf so značkou ladenie. 52 00:02:51,210 --> 00:02:53,540 V tomto prípade sa jedná len ladenie reťazec 53 00:02:53,540 --> 00:02:56,840 že som až nepríjemné, takže sa stane veľmi jasne vo výstupe môjho kódu 54 00:02:56,840 --> 00:02:59,200 čo to je, že chcem ukázať. 55 00:02:59,200 --> 00:03:04,410 A výstup tu číslo ktoré sme vypočítali. 56 00:03:04,410 --> 00:03:06,800 >> V tomto prípade, ja by som mohol chcú presne vedieť, 57 00:03:06,800 --> 00:03:11,380 , Čo sa deje pred a Po nejakej konkrétnej výpočty. 58 00:03:11,380 --> 00:03:16,224 Takže som mohol pred použiť printf a po tomto riadku kódu. 59 00:03:16,224 --> 00:03:18,640 V tomto prípade by mohla dokonca som aby to trochu viac jasné, 60 00:03:18,640 --> 00:03:21,960 tým, že hovorí ladenie pred a ladenie po tak 61 00:03:21,960 --> 00:03:26,540 že nemám pliesť sám s viac riadkov, ktoré vyzerajú totožné. 62 00:03:26,540 --> 00:03:32,290 >> Teraz, keď sme to překompilovat a beh to, zadajte číslo ako päť znovu, 63 00:03:32,290 --> 00:03:35,090 môžeme vidieť, že máme Teraz výstup pred a po 64 00:03:35,090 --> 00:03:40,670 a zistíte, že sme neurobili jasné rozdelenia alebo jasné majú čísla 65 00:03:40,670 --> 00:03:43,680 že sme vlastne chcete robiť. 66 00:03:43,680 --> 00:03:48,660 Teraz v tomto prípade sa jedná v skutočnosti nie je jasný výstup. 67 00:03:48,660 --> 00:03:52,440 Nie je to naozaj jasné, že výsledok chceme z tohto konkrétneho programu. 68 00:03:52,440 --> 00:03:54,427 >> A to je, opäť, je trochu neprirodzený. 69 00:03:54,427 --> 00:03:57,510 Ale možno, jednou z vecí, ktoré by sme mohli urobiť v prípade, že špecifikácia povedal, 70 00:03:57,510 --> 00:04:01,900 že chceme rozdeliť tým, 2 a pridá sa 1-- tak, inými slovami, 71 00:04:01,900 --> 00:04:04,550 chceme zaokrúhliť up-- potom aby sme vedeli, že sme mohli 72 00:04:04,550 --> 00:04:08,060 robiť, že konkrétnu vec, v tomto prípade. 73 00:04:08,060 --> 00:04:14,010 Teraz vieme, že budeme možné pridať 1 do nášho zníži na polovicu počtu. 74 00:04:14,010 --> 00:04:16,490 >> Poďme to překompilovat a potvrdzujú, že táto 75 00:04:16,490 --> 00:04:18,860 sa správa tak, že chceme. 76 00:04:18,860 --> 00:04:21,980 Môžeme vidieť, že teraz pred s, máme číslo 5. 77 00:04:21,980 --> 00:04:26,620 Potom, čo, máme číslo 3, ktorá je podľa nášho špecifikácie, 78 00:04:26,620 --> 00:04:29,292 je to, čo sme chceli urobiť. 79 00:04:29,292 --> 00:04:31,000 Ale keď sa pozrieme na Výstup tu, môžeme 80 00:04:31,000 --> 00:04:33,760 vidieť, že by sme mohli mať ďalšie bug celkom, čo je 81 00:04:33,760 --> 00:04:36,940 že začíname našu počítať od 0. 82 00:04:36,940 --> 00:04:39,390 >> Teraz sa znova, to je niečo, že sme videli v minulosti 83 00:04:39,390 --> 00:04:42,500 a môžeme opraviť pomerne ľahko. 84 00:04:42,500 --> 00:04:44,790 Ale v tomto prípade sme tiež mal výhodu 85 00:04:44,790 --> 00:04:48,940 použitie príkazu printf priamo vo vnútri slučky for 86 00:04:48,940 --> 00:04:52,930 presne vedieť, kde sa deje, že chyba. 87 00:04:52,930 --> 00:04:55,150 Takže printf vyhlásenia sú veľmi užitočné pri pomoci 88 00:04:55,150 --> 00:04:57,940 určiť, kde, Presne v zdrojovom kóde, 89 00:04:57,940 --> 00:05:00,620 špecifická chyba nastane. 90 00:05:00,620 --> 00:05:03,650 >> A to je tiež dôležité si uvedomiť, že, ako sme písanie kódu, 91 00:05:03,650 --> 00:05:06,052 by sme mohli mať predpoklady o stave programu. 92 00:05:06,052 --> 00:05:08,510 Alebo by sme mohli mať predpoklady o tom, čo časť programu 93 00:05:08,510 --> 00:05:13,020 je vlastne správne, alebo nesprávne, pri neskôr, keď sme stavať na tomto programe 94 00:05:13,020 --> 00:05:15,950 a urobiť z neho súčasť komplexný a väčšie program, 95 00:05:15,950 --> 00:05:19,700 že by sme si uvedomiť, že niektoré aspekty z toho nie je v skutočnosti buggy. 96 00:05:19,700 --> 00:05:22,680 >> Použitie printf môže naozaj pomôcť zúžiť a identifikovať 97 00:05:22,680 --> 00:05:26,430 regióny programu, ktorý nemusí chová presne tak, že sme 98 00:05:26,430 --> 00:05:29,500 očakávať, že, na základe našich predpokladov. 99 00:05:29,500 --> 00:05:31,460 Ale je tu ďalší nástroje k dispozícii, rovnako, 100 00:05:31,460 --> 00:05:34,860 že nám umožní pokúsiť sa zistiť , Kde sa chyba vyskytuje 101 00:05:34,860 --> 00:05:39,930 A tiež, konkrétne, aké veci sa deje vo vnútri programu. 102 00:05:39,930 --> 00:05:41,990 >> Takže pomocou printf je veľmi užitočné, ak chceme, 103 00:05:41,990 --> 00:05:45,900 určiť konkrétne oblasti program, ktorý má nejakú chybu. 104 00:05:45,900 --> 00:05:47,730 Ale je to tiež stáva únavné po chvíli. 105 00:05:47,730 --> 00:05:50,500 V tomto prípade sa jedná o relatívne jednoduchý program 106 00:05:50,500 --> 00:05:52,750 len s jedným alebo dvoma premennými. 107 00:05:52,750 --> 00:05:57,260 A to sa stáva pre nás veľmi ľahké vytlačiť hodnotu týchto premenných 108 00:05:57,260 --> 00:05:59,670 v rámci väčšieho programu. 109 00:05:59,670 --> 00:06:02,670 >> Ale aby sme mohli mať iný program, ktorý má mnoho premenných. 110 00:06:02,670 --> 00:06:06,530 A to nemusí byť úplne tak ľahké printf 111 00:06:06,530 --> 00:06:10,120 pokúsiť sa vyhodnotiť, čo sa deje každému z týchto premenných 112 00:06:10,120 --> 00:06:13,590 Keďže je program implementácie. 113 00:06:13,590 --> 00:06:16,960 Tam je program, ktorý existuje volal debugger programu. 114 00:06:16,960 --> 00:06:20,320 V tomto prípade je ten, ktorý budeme Použitie je GNU debugger, alebo GDB, 115 00:06:20,320 --> 00:06:24,260 že nám umožňuje kontrolovať interné objavovali programu v oveľa 116 00:06:24,260 --> 00:06:25,700 detailné cesta. 117 00:06:25,700 --> 00:06:28,810 >> Môžeme skutočne vykonávať GDB z príkazového riadku 118 00:06:28,810 --> 00:06:35,370 tu jednoducho napísaním GDB a príkaz, ktorý chceme ladiť. 119 00:06:35,370 --> 00:06:37,550 V tomto prípade počítať. 120 00:06:37,550 --> 00:06:41,650 Teraz v tomto prípade môžeme vidieť, že to nás privádza do riadku, ktorý hovorí, že GDB. 121 00:06:41,650 --> 00:06:44,020 A môžeme skutočne vykonávanie príkazov na GDB 122 00:06:44,020 --> 00:06:48,260 skutočne začať vykonávanie z Program, zastavte ho v určitých bodoch, 123 00:06:48,260 --> 00:06:51,060 vyhodnotiť premenné a skontrolujte premenné, ktoré 124 00:06:51,060 --> 00:06:54,152 existujú v stave programu v danú chvíľu 125 00:06:54,152 --> 00:06:55,110 a tak ďalej a tak ďalej. 126 00:06:55,110 --> 00:06:57,240 Poskytuje veľa sily k nám. 127 00:06:57,240 --> 00:06:59,960 >> Ale to len tak sa stane že CS50 IDE tiež 128 00:06:59,960 --> 00:07:05,870 poskytuje GUI alebo užívateľa rozhranie pre GDB, že 129 00:07:05,870 --> 00:07:11,120 umožňuje nám to urobiť, bez toho aby ste museli príkazového riadku rozhranie vôbec 130 00:07:11,120 --> 00:07:13,560 alebo dokonca vôbec. 131 00:07:13,560 --> 00:07:16,930 Tak, že môžem získať prístup, že je pomocou tlačidla ladenie 132 00:07:16,930 --> 00:07:20,120 na samom vrchole CS50 IDE. 133 00:07:20,120 --> 00:07:24,280 Teraz v minulosti, čo máme vidieť, je to, že pomocou príkazu 134 00:07:24,280 --> 00:07:27,660 linka kompilácie a spustiť program. 135 00:07:27,660 --> 00:07:29,790 >> Tlačidlo ladenia robí oboch týchto krokov. 136 00:07:29,790 --> 00:07:34,380 Ale tiež to prinesie až Karta debugger na extrémnej pravici 137 00:07:34,380 --> 00:07:38,280 ktorý nám umožňuje prezrieť celý rad vlastností programu 138 00:07:38,280 --> 00:07:40,500 ako je vykonávanie. 139 00:07:40,500 --> 00:07:44,280 Ak mám na tlačidlo Debug, v tomto prípad, bude vychovávať 140 00:07:44,280 --> 00:07:48,230 nová karta v konzole Okno na samom dne. 141 00:07:48,230 --> 00:07:51,160 >> A môžete vidieť, že táto karta má niektoré informácie na samom vrchole. 142 00:07:51,160 --> 00:07:52,670 A môžeme do značnej miery ignorovať. 143 00:07:52,670 --> 00:07:54,800 Ale jedna z vecí, že chceme všimnúť 144 00:07:54,800 --> 00:07:57,170 je to, že výstupy to isté, čo sme 145 00:07:57,170 --> 00:08:03,000 by sa dostať, ak sme sa snažili spustiť, aby na C program v terminálovom okne. 146 00:08:03,000 --> 00:08:06,230 >> Tu môžeme vidieť, že to beží rinčanie, a má celý rad príznakov, 147 00:08:06,230 --> 00:08:12,660 a to je kompilácia našu count.c súbor, ktorá bola vybraná karta v čase 148 00:08:12,660 --> 00:08:15,100 že som narazila ladenie. 149 00:08:15,100 --> 00:08:18,010 Tak to je veľmi užitočná, pretože teraz pomocou tohto tlačidla ladenie, 150 00:08:18,010 --> 00:08:23,280 môžeme súčasne kompilácie a spustiť program, ktorý sme vlastne 151 00:08:23,280 --> 00:08:24,460 chcete spustiť. 152 00:08:24,460 --> 00:08:27,880 >> Jedným z príznakov, ktoré je dôležité, v tomto prípade, 153 00:08:27,880 --> 00:08:30,190 sme skutočne používali najdlhšiu dobu 154 00:08:30,190 --> 00:08:32,450 ale tiež len robil nejaký ruku mávanie [nepočuteľný], ktorý 155 00:08:32,450 --> 00:08:33,820 je toto tu. 156 00:08:33,820 --> 00:08:35,790 V zazvonením, hovorí -ggdb3. 157 00:08:35,790 --> 00:08:38,570 158 00:08:38,570 --> 00:08:41,250 V tomto prípade to, čo sme rozprávanie zazvonením, náš prekladač, 159 00:08:41,250 --> 00:08:43,820 je to, že chceme zostaviť náš program. 160 00:08:43,820 --> 00:08:46,810 Ale tiež aké sú označované ako informácie o symbol 161 00:08:46,810 --> 00:08:50,940 takže kompilátor má skutočne prístup na mnohých podkladových informácií 162 00:08:50,940 --> 00:08:52,610 obsiahnuté v rámci programu. 163 00:08:52,610 --> 00:08:55,260 >> Presnejšie povedané, je počet funkcií, ktoré mám, 164 00:08:55,260 --> 00:08:58,000 mená týchto funkcií, premenné, typy 165 00:08:58,000 --> 00:09:01,730 že tieto premenné sú, a rôzne z ďalších vecí, ktoré pomáhajú debugger 166 00:09:01,730 --> 00:09:04,350 vykonávať svoju činnosť. 167 00:09:04,350 --> 00:09:06,600 Teraz je tu ešte niečo to je dôležité spomenúť, 168 00:09:06,600 --> 00:09:10,280 keď hovoríme o chod program týmto spôsobom. 169 00:09:10,280 --> 00:09:13,660 >> Všimnite si, že to má vlastne vychoval novú kartu v našej konzole 170 00:09:13,660 --> 00:09:14,780 po dne. 171 00:09:14,780 --> 00:09:18,600 Máme už nemusí komunikovať priamo s okno terminálu. 172 00:09:18,600 --> 00:09:21,420 Ale táto nová karta je v skutočnosti okno terminálu. 173 00:09:21,420 --> 00:09:26,710 Proste je špecifická pre chod Program, ktorý sme vytvorili. 174 00:09:26,710 --> 00:09:29,270 >> Všimnite si, že v spodnej časti, v v kombinácii s nejakým výstupom 175 00:09:29,270 --> 00:09:33,500 tým, zvoniť kompilátor a GDB, ktoré môžeme do značnej miery ignorovať, 176 00:09:33,500 --> 00:09:37,570 v skutočnosti ukazuje výstup náš program na samom dne. 177 00:09:37,570 --> 00:09:41,240 Teraz je dôležité si uvedomiť, že toto jedno okno vlastne 178 00:09:41,240 --> 00:09:43,360 vám ukáže Výstup z programu 179 00:09:43,360 --> 00:09:47,190 ale tiež môže prijímať vstup pre daný program, rovnako. 180 00:09:47,190 --> 00:09:49,260 >> Takže oznámenia, ktorá hovorí, Prosím, zadajte číslo, 181 00:09:49,260 --> 00:09:53,050 ktorý je rovnaký výstup, ktorý sme mali mal v terminálovom okne predtým. 182 00:09:53,050 --> 00:09:55,510 Ale už je to uvedené v tejto novej karte. 183 00:09:55,510 --> 00:09:56,550 Aj môžete zadať číslo. 184 00:09:56,550 --> 00:10:00,900 A to bude skutočne fungujú ako očakávame 185 00:10:00,900 --> 00:10:05,890 nám ukazuje náš ladenie, výstup, výstup, ktorý by mohol byť buggy, 186 00:10:05,890 --> 00:10:07,010 ako sme videli skôr. 187 00:10:07,010 --> 00:10:10,460 A na samom dne, ho v skutočnosti má nejaký prídavný výstup 188 00:10:10,460 --> 00:10:14,550 z HDP, len hovorím, že tento program ukončený. 189 00:10:14,550 --> 00:10:16,655 >> Teraz, ako ste videli v tejto najmä beh cez, 190 00:10:16,655 --> 00:10:19,370 by bolo veľmi málo užitočné, pretože aj 191 00:10:19,370 --> 00:10:23,740 keď sme mali prísť menu debugger up, to bolo ešte bežiaci program. 192 00:10:23,740 --> 00:10:26,790 V žiadnom momente urobil to vlastne pozastaviť výkon pre nás 193 00:10:26,790 --> 00:10:30,767 aby bolo možné kontrolovať všetky premenné obsiahnuté. 194 00:10:30,767 --> 00:10:32,850 Je tu niečo iné že musíme urobiť, aby 195 00:10:32,850 --> 00:10:36,910 dostať GDB si uvedomiť, že chceme, pozastaviť realizáciu programu 196 00:10:36,910 --> 00:10:42,820 a nie len aby mohol pokračovať v konaní obvykle ako by sme vo všetkých ostatných prípadoch. 197 00:10:42,820 --> 00:10:45,530 >> Za účelom pozastavenie plnenia, v nejakej konkrétnej linke, 198 00:10:45,530 --> 00:10:47,830 musíme vytvoriť to, čo je volal bodu zlomu. 199 00:10:47,830 --> 00:10:52,670 A zlom je veľmi ľahko vytvorená v tomto CS50 IDE tým, že myši 200 00:10:52,670 --> 00:10:57,090 a kliknutím na tlačidlo priamo vľavo nejaké konkrétne číslo riadka. 201 00:10:57,090 --> 00:10:59,920 Raz som to urobil, červená bodka Zobrazí sa, čo znamená, 202 00:10:59,920 --> 00:11:02,300 že linka je teraz bodu zlomu. 203 00:11:02,300 --> 00:11:07,540 >> A nabudúce, ktorý som bežať GDB to, sa zastavíte v tomto bode zlomu 204 00:11:07,540 --> 00:11:10,280 akonáhle dosiahne tento riadok kódu. 205 00:11:10,280 --> 00:11:12,230 Teraz je tento dôležitý si uvedomiť 206 00:11:12,230 --> 00:11:16,140 že to nie je nevyhnutne prípad, že každý riadok kódu 207 00:11:16,140 --> 00:11:17,880 je v skutočnosti k dispozícii. 208 00:11:17,880 --> 00:11:23,780 Ak by som mal vytvoriť funkciu tu, pre example-- void F-- 209 00:11:23,780 --> 00:11:31,230 a jednoducho tlačovú linku here-- ahoj world-- ak Nikdy som zavolať túto funkciu, 210 00:11:31,230 --> 00:11:34,770 to bude v prípade, že keď som nastaviť bodu zlomu, 211 00:11:34,770 --> 00:11:36,220 funkcia nebude nikdy volal. 212 00:11:36,220 --> 00:11:38,310 A preto je tento najmä zlom 213 00:11:38,310 --> 00:11:43,040 Nikdy vlastne pozastaví vykonávanie programu. 214 00:11:43,040 --> 00:11:48,020 >> Takže povedzme, že som správne vytvoriť prestávka bod na nejakom riadku kódu 215 00:11:48,020 --> 00:11:50,340 , Ktorý bude skutočne vykonaná. 216 00:11:50,340 --> 00:11:53,470 Teraz je v tomto prípade, to je Prvý riadok v hlavnej funkcie. 217 00:11:53,470 --> 00:11:56,630 Tak to bude určite prípad že akonáhle začnem prevedenie, 218 00:11:56,630 --> 00:11:58,580 sa dosiahne veľmi prvý riadok. 219 00:11:58,580 --> 00:12:00,230 GDB sa zastaví realizáciu. 220 00:12:00,230 --> 00:12:04,100 A potom budem môcť interakciu s ladiaci program. 221 00:12:04,100 --> 00:12:08,480 >> Môžete nastaviť viac riadky ako Hraničné hodnoty, ak by ste chceli. 222 00:12:08,480 --> 00:12:11,365 Môžeme tiež vytvoriť line up tu v tomto segmente kóde 223 00:12:11,365 --> 00:12:12,490 že nikdy nebude dosiahnutá. 224 00:12:12,490 --> 00:12:14,744 A môžeme tiež nastaviť jednu nižšie. 225 00:12:14,744 --> 00:12:16,660 Dôvod, že by sme Chcete to urobíme 226 00:12:16,660 --> 00:12:19,119 ísť do trochu viac detail za chvíľu. 227 00:12:19,119 --> 00:12:21,660 Takže teraz mi dovoľte, aby som jednoducho zakázať tieto ďalšie body prerušenia 228 00:12:21,660 --> 00:12:24,940 takže sa môžeme pozrieť na to, čo sa deje keď mám jednu prestávku 229 00:12:24,940 --> 00:12:27,650 bod v mojom programe. 230 00:12:27,650 --> 00:12:29,410 Urobil som nejaké zmeny tohto programu. 231 00:12:29,410 --> 00:12:30,750 Tak som potrebné uložiť. 232 00:12:30,750 --> 00:12:34,490 Budem kliknite na príkaz debug tak, že môžem začne kompilácie a potom 233 00:12:34,490 --> 00:12:36,880 vykonávanie ladiaci program. 234 00:12:36,880 --> 00:12:40,632 >> Budeme vidieť, že po okamihoch, o linka, ktorá sme vybrali ako prestávke 235 00:12:40,632 --> 00:12:43,360 bod je zvýraznený žlto. 236 00:12:43,360 --> 00:12:47,440 Môžeme tiež všimnúť, že v horná priamo v ladení paneli 237 00:12:47,440 --> 00:12:50,940 že ikona pauza zmenil do malej ikony prehrávania. 238 00:12:50,940 --> 00:12:54,710 To znamená, že máme pauzu prevedenie, v tomto konkrétnom prípade. 239 00:12:54,710 --> 00:12:57,840 A biť na tlačidlo Prehrať by nám umožní pokračovať v realizácii 240 00:12:57,840 --> 00:13:00,000 v tomto konkrétnom bode. 241 00:13:00,000 --> 00:13:03,240 >> Všimnite si, že je tu pár ďalších Tlačidlá sú k dispozícii v tomto ladenie panelu, 242 00:13:03,240 --> 00:13:04,220 tiež. 243 00:13:04,220 --> 00:13:09,470 Krok cez, čo mi umožňuje spustiť, že jeden riadok kódu 244 00:13:09,470 --> 00:13:14,030 a krok sa k tomuto riadku na budúci, ktorá, v tomto prípade, 245 00:13:14,030 --> 00:13:17,060 by znamenalo, že printf príkaz vykonaný. 246 00:13:17,060 --> 00:13:22,310 A bude potom pauza exekúcia na riadku 13, tak ako. 247 00:13:22,310 --> 00:13:25,090 >> A je tu tiež krok do funkcie, čo 248 00:13:25,090 --> 00:13:28,950 je užitočné, ak som vytvoril ďalší Funkcie inde v zdrojovom kóde. 249 00:13:28,950 --> 00:13:31,420 A chcem vstúpiť do tie funkcie skôr než 250 00:13:31,420 --> 00:13:33,050 vykonávať túto funkciu, ako celok. 251 00:13:33,050 --> 00:13:37,279 Ale pozrieme viac na kroku do funkcie za chvíľu. 252 00:13:37,279 --> 00:13:40,320 Teraz si všimnúť niektoré ďalšie veci, ktoré v skutočnosti existujú v tomto ladenie paneli. 253 00:13:40,320 --> 00:13:44,110 >> Máme tento panel nazvaný zásobník volaní, ktorý nám ukazuje, 254 00:13:44,110 --> 00:13:45,300 kde presne sme. 255 00:13:45,300 --> 00:13:48,550 V tomto prípade sme sú vo vnútri z hlavných funkcií. 256 00:13:48,550 --> 00:13:50,880 Náš scenár sa nazýva count.c. 257 00:13:50,880 --> 00:13:53,820 A my stalo, že sa na riadok 13, stĺpec onú, ktorý 258 00:13:53,820 --> 00:13:58,950 je presne to, čo zvýrazní región zdrojového kódu indikuje, rovnako. 259 00:13:58,950 --> 00:14:02,435 >> Teraz si všimnite, že to tiež ukazuje, pod lokálne premenné úseku 260 00:14:02,435 --> 00:14:06,710 všetky premenné, ktoré existujú v rámci tejto funkcie. 261 00:14:06,710 --> 00:14:08,930 Je dôležité si uvedomiť, že všetky premenné 262 00:14:08,930 --> 00:14:12,580 sa objaví v tomto lokálnej premennej časť vo vnútri funkcie, 263 00:14:12,580 --> 00:14:14,380 ešte pred tým, než sú definované. 264 00:14:14,380 --> 00:14:19,160 Vidíme tu, že máme premennú volal num, má predvolenú hodnotu 0, 265 00:14:19,160 --> 00:14:21,280 a to je typu int. 266 00:14:21,280 --> 00:14:24,110 >> Teraz, ako sme vlastne inicializovať všetky tieto premenné, 267 00:14:24,110 --> 00:14:26,685 nie sme nutne zaručené, že vidieť hodnotu 0. 268 00:14:26,685 --> 00:14:29,200 A v závislosti na ďalších popravách že ste vykonali 269 00:14:29,200 --> 00:14:32,020 a stav vašej pamäti pri ste skutočne spustiť tento program, 270 00:14:32,020 --> 00:14:34,605 môžete zistiť, že vás Nevidím hodnoty 0 271 00:14:34,605 --> 00:14:36,550 a, namiesto toho, niektoré ďalšie bláznivé čísla. 272 00:14:36,550 --> 00:14:38,390 >> Ale nebojte sa o tom. 273 00:14:38,390 --> 00:14:44,610 Nebude to byť relevantné, kým ste skutočne inicializovať hodnotu. 274 00:14:44,610 --> 00:14:49,630 Teraz v tomto prípade môžeme vidieť, že Som vykonal nejaké výstupy. 275 00:14:49,630 --> 00:14:52,131 A ja, práve teraz, sa zastavil popravu. 276 00:14:52,131 --> 00:14:53,880 Ale v tomto prípade to, čo Naozaj chcem robiť 277 00:14:53,880 --> 00:14:58,060 je teraz prekročiť tento riadok kódu, takže môžem vlastne 278 00:14:58,060 --> 00:15:04,390 dotaz používateľa pre toto int, že chceme používať v našom programe. 279 00:15:04,390 --> 00:15:07,060 >> Teraz v tomto prípade, keď Som narazila prekročiť, oznámenie 280 00:15:07,060 --> 00:15:11,940 že Pozastavenie alebo skôr Resume Tlačidlo sa zmení na toto tlačidlo Pause 281 00:15:11,940 --> 00:15:14,022 preto, že tento kód je v skutočnosti vykonávania. 282 00:15:14,022 --> 00:15:15,730 Čo sa deje práve teraz je, že je 283 00:15:15,730 --> 00:15:21,630 na nás čaká na vstup nejaké informácie ako môžeme vidieť naše výstupnom texte 284 00:15:21,630 --> 00:15:23,600 na samom dne. 285 00:15:23,600 --> 00:15:25,787 >> Takže teraz, je to nie v skutočnosti sa odmlčal, 286 00:15:25,787 --> 00:15:28,620 Aj keď to, tak nejako sa zdá, byť preto, že sa nič nedeje. 287 00:15:28,620 --> 00:15:32,360 Ale len tak sa stane, že v môj špecifický prípad na riadku 13, 288 00:15:32,360 --> 00:15:34,210 Čakám na vstup užívateľa. 289 00:15:34,210 --> 00:15:39,130 A tak GDB nie je schopný kontrolovať program sa rozbehne. 290 00:15:39,130 --> 00:15:43,370 >> Teraz nabudúce, že mám zadať niektoré input-- takže budem zadajte toto číslo 5, 291 00:15:43,370 --> 00:15:46,140 ako sme videli v past-- hit Return, a my 292 00:15:46,140 --> 00:15:51,430 Všimnite si, že okamžite, GDB pauzy a opäť upozorňuje na ďalší riadok. 293 00:15:51,430 --> 00:15:55,320 Ale všimnite si, že teraz, ako Výsledkom našej zadaním hodnoty, 294 00:15:55,320 --> 00:15:58,930 sme aktualizovali túto hodnotu vo vnútri z našich lokálnych premenných, ktoré 295 00:15:58,930 --> 00:16:05,560 je veľmi užitočné, aby presne poznať čo, že číslo bolo v pamäti. 296 00:16:05,560 --> 00:16:10,650 >> Teraz môžem dovoliť tento program pokračovať hrať až do konca jeho prevedení 297 00:16:10,650 --> 00:16:12,570 tým, že udrie Pokračovať. 298 00:16:12,570 --> 00:16:16,410 Vidíme, že veľmi rýchlo robí program skončiť vykonávajúci 299 00:16:16,410 --> 00:16:19,790 o rovnakom výkone, ktoré sme predtým, ladiaci program zavrie, 300 00:16:19,790 --> 00:16:23,170 a teraz tento program úplne nezastaví. 301 00:16:23,170 --> 00:16:25,320 >> Aj ukazujú, že iba pre účely vidí to, čo 302 00:16:25,320 --> 00:16:27,280 sa stane, keď sme vlastne hit Pokračovať. 303 00:16:27,280 --> 00:16:30,640 Ale my v skutočnosti sa chystáme chcem sa vrátiť do tohto programu 304 00:16:30,640 --> 00:16:33,820 takže sa môžeme pokúsiť ladenie presne to, čo sa deje. 305 00:16:33,820 --> 00:16:37,980 Teraz, keď som pomocou nástroja na ladenie, môžem Nie je nutné tieto debug printf vyhlásení. 306 00:16:37,980 --> 00:16:43,860 >> Takže som ich mohol odstrániť čo budem robiť Teraz stačí sa vrátiť k nášmu jednoduchšie kód 307 00:16:43,860 --> 00:16:45,950 že sme mali pred chvíľou. 308 00:16:45,950 --> 00:16:48,790 Teraz, keď som sa zachrániť naprogramovať a spustiť ho, 309 00:16:48,790 --> 00:16:53,700 to bude, opäť, choďte na túto počiatočnú zlomiť bod, ktorý som mal na linke 11. 310 00:16:53,700 --> 00:16:57,700 A budem môcť prezrieť moje premenné ako ja chcem robiť. 311 00:16:57,700 --> 00:17:00,695 >> To len tak sa stane, že to Súčasťou nie je príliš zaujímavé, 312 00:17:00,695 --> 00:17:04,364 A viem, že idem vytlačiť toto vyhlásenie. 313 00:17:04,364 --> 00:17:05,280 Prosím, zadajte číslo. 314 00:17:05,280 --> 00:17:08,099 A potom, ja viem, že idem požiadať užívateľa pre toto celé číslo. 315 00:17:08,099 --> 00:17:13,329 Tak snáď som skutočne chcú hýbať rozbiť bod trochu ďalej. 316 00:17:13,329 --> 00:17:16,710 >> Môžete odstrániť body prerušenia kliknutím, opäť priamo 317 00:17:16,710 --> 00:17:18,460 na ľavo od uvedenej číslo riadka. 318 00:17:18,460 --> 00:17:22,200 To red dot zmizne, čo znamená, že tento zlom je teraz preč. 319 00:17:22,200 --> 00:17:24,780 Teraz v tomto prípade, poprava bola pozastavená. 320 00:17:24,780 --> 00:17:27,770 A tak to nie je vlastne bude pokračovať v tomto konkrétnom prípade. 321 00:17:27,770 --> 00:17:30,210 Ale môžem nastaviť pauzu bod o niečo neskôr. 322 00:17:30,210 --> 00:17:33,880 >> A keď teraz som znovu môj kód, bude pokračovať a povedať 323 00:17:33,880 --> 00:17:36,190 bod tohto bodom zlomu. 324 00:17:36,190 --> 00:17:37,374 Opäť platí, že som narazila životopis. 325 00:17:37,374 --> 00:17:39,040 Nevyzerá ako nič sa nedeje. 326 00:17:39,040 --> 00:17:41,450 Ale to je preto, že moja kód čaká na vstup. 327 00:17:41,450 --> 00:17:47,900 Budem zadať číslo 5, stlačte klávesu Enter, a Teraz bude hit ďalšie zlom. 328 00:17:47,900 --> 00:17:50,570 >> Teraz v tomto prípade to je riadok kódu 329 00:17:50,570 --> 00:17:53,820 že predtým, ako sme vedeli, náhodou buggy. 330 00:17:53,820 --> 00:17:57,590 Takže poďme hodnotiť, čo sa stane v tomto konkrétnom okamihu. 331 00:17:57,590 --> 00:18:02,620 Keď je zvýraznená čiara, to linka zatiaľ nebol vykonaný. 332 00:18:02,620 --> 00:18:06,490 Takže v tomto prípade môžeme vidieť že mám číslo, ktoré 333 00:18:06,490 --> 00:18:11,610 Mám číslo s názvom num, že má hodnotu 5. 334 00:18:11,610 --> 00:18:15,090 A ja budem vykonávať niektorí matematiky na tomto čísle. 335 00:18:15,090 --> 00:18:20,130 >> Keby som krok nad tým, môžeme Všimnite si, že hodnotu pre num 336 00:18:20,130 --> 00:18:23,780 zmenilo v súlade so aritmetika, že sme skutočne urobili. 337 00:18:23,780 --> 00:18:26,810 A teraz, že sme z toho pre vnútorné slučky 338 00:18:26,810 --> 00:18:29,090 alebo teraz, že pre sláčiky sám je zvýraznený, 339 00:18:29,090 --> 00:18:32,450 vidíme, že máme nový Premenná Volal som, že 340 00:18:32,450 --> 00:18:35,370 sa bude použitý v tom, že na slučke. 341 00:18:35,370 --> 00:18:38,230 >> Teraz pamätať Predtým som spomenul, že niekedy, že ste 342 00:18:38,230 --> 00:18:43,470 uvidí nejaký blázon Čísla sú v predvolenom nastavení pred týmto číslom 343 00:18:43,470 --> 00:18:45,530 alebo že premenná je v skutočnosti inicializovaný. 344 00:18:45,530 --> 00:18:49,040 Môžeme vidieť, že presne tu v tejto premennej 345 00:18:49,040 --> 00:18:51,345 Volal som, ktorý nemá doteraz inicializovaný 346 00:18:51,345 --> 00:18:53,560 v dobe zvýraznenie. 347 00:18:53,560 --> 00:18:57,070 Ale môžeme vidieť, že má nejaké číslo že by sme vlastne očakávať. 348 00:18:57,070 --> 00:18:57,620 >> To je v poriadku. 349 00:18:57,620 --> 00:18:59,661 Nebojte sa o tom pretože sme vlastne 350 00:18:59,661 --> 00:19:04,970 inicializuje toto číslo až I prekročiť tejto priamky a hodnotu 351 00:19:04,970 --> 00:19:08,560 i bola inicializovaná na hodnotu 1. 352 00:19:08,560 --> 00:19:11,400 Tak vidieť, že to je vlastne v prípade, poďme prekročiť. 353 00:19:11,400 --> 00:19:14,420 Teraz môžeme vidieť, že linka bola popravená. 354 00:19:14,420 --> 00:19:17,000 A sme teraz zvýraznenie printf tento riadok. 355 00:19:17,000 --> 00:19:22,230 >> A teraz môžeme vidieť, ako naše hodnoty o i a 3 sa menili v priebehu času. 356 00:19:22,230 --> 00:19:26,450 To je veľmi užitočné k tomu, v skutočnosti, je prekročiť linky opakovane. 357 00:19:26,450 --> 00:19:30,480 A môžete nájsť to, čo v skutočnosti sa deje vo vnútri vášho pre slučky 358 00:19:30,480 --> 00:19:33,660 a čo sa stane s premenné vo vnútri, že pre sláčiky 359 00:19:33,660 --> 00:19:39,200 ako to implementáciu programu vyskytuje jeden krok v čase. 360 00:19:39,200 --> 00:19:41,110 >> Práve v tomto bode, I Prekročila tak akurát 361 00:19:41,110 --> 00:19:44,210 že som teraz som na konci môjho programu. 362 00:19:44,210 --> 00:19:46,980 Keby som krok cez to, že to bude vlastne prestane vykonávanie 363 00:19:46,980 --> 00:19:48,860 ako sme videli v minulosti. 364 00:19:48,860 --> 00:19:52,110 Dovoľte mi, aby som to znova, opäť, tak že môžem poukázať niečo iné von, 365 00:19:52,110 --> 00:19:53,320 tiež. 366 00:19:53,320 --> 00:19:55,350 >> V tomto prípade je Teraz ma pýta, znovu, 367 00:19:55,350 --> 00:19:57,100 pre množstvo, ktoré Budem znova zadajte. 368 00:19:57,100 --> 00:20:00,300 Ale tentoraz, ja idem pre vstup do väčší počet, takže pre sláčiky 369 00:20:00,300 --> 00:20:02,540 bude opakovať viackrát. 370 00:20:02,540 --> 00:20:06,090 V tomto prípade, idem zadajte hodnotu 11. 371 00:20:06,090 --> 00:20:08,390 >> Teraz znovu, pretože som nastaviť bod zlomu na riadku 15, 372 00:20:08,390 --> 00:20:10,490 to bude upozorniť na tento riadok. 373 00:20:10,490 --> 00:20:12,980 Môžeme vidieť, že naše Číslo 11 je správne 374 00:20:12,980 --> 00:20:15,560 zastúpené v našich lokálnych premenných. 375 00:20:15,560 --> 00:20:22,460 Stepping cez to, že môžeme teraz sledujte, čo sa stane s našou hodnotu aj 376 00:20:22,460 --> 00:20:25,680 ako budeme pokračovať vo vnútri to pre slučku. 377 00:20:25,680 --> 00:20:31,960 To dostane zvýšený zakaždým, keď dostať na vrchol, ktorý pre slučky. 378 00:20:31,960 --> 00:20:35,110 >> A teraz jedna z vecí, ktoré by mohli byť užitočné vykonať počas vykonávania 379 00:20:35,110 --> 00:20:40,490 tohto programu je pre mňa skutočne zmeniť premenné Midstream vidieť 380 00:20:40,490 --> 00:20:42,450 čo sa stane s mojím programom. 381 00:20:42,450 --> 00:20:46,540 V tomto prípade, môžem vlastne dvakrát kliknite na hodnotu. 382 00:20:46,540 --> 00:20:48,040 Všimnite si, že sa stane textové pole. 383 00:20:48,040 --> 00:20:50,280 >> Teraz môžem vstúpiť iný úplne cení 384 00:20:50,280 --> 00:20:55,700 vidieť, ako môj program sa chová keď som sa zmenil tejto premennej. 385 00:20:55,700 --> 00:20:59,560 Teraz je v tomto prípade, je premenná aj teraz obsahuje hodnotu 10. 386 00:20:59,560 --> 00:21:02,810 Ale program je stále zastavila popravy. 387 00:21:02,810 --> 00:21:07,610 Keď som sa prekročiť, vidím, že hodnota i, ktorý som vstúpil ako 10, 388 00:21:07,610 --> 00:21:12,170 nie je väčšia ako hodnota num, ktorý okamžite spôsobí, že pre sláčiky 389 00:21:12,170 --> 00:21:14,240 zastaviť vykonávanie. 390 00:21:14,240 --> 00:21:16,210 >> Teraz to nie je jediný Dôvodom, prečo by ste 391 00:21:16,210 --> 00:21:19,450 Chcete zmeniť premennú na mieste. 392 00:21:19,450 --> 00:21:22,210 Dalo by sa skutočne chcú pokúsiť sa tak zmeniť 393 00:21:22,210 --> 00:21:24,590 že môžete pokračovať vykonaní slučky 394 00:21:24,590 --> 00:21:27,370 alebo tak, že si môžete upraviť nejakú hodnotu pred ním 395 00:21:27,370 --> 00:21:32,630 dosiahne nejaké konkrétne sadu aritmetiky že sa chystáte urobiť. 396 00:21:32,630 --> 00:21:36,210 >> Takže teraz, že sme vlastne zmeniť hodnota aj ako program sa vykonávania, 397 00:21:36,210 --> 00:21:39,540 to spôsobilo, že pre sláčiky prestať predčasne, pretože naraz, aj 398 00:21:39,540 --> 00:21:42,770 sa stalo, že je väčšia ako hodnota NUM, čo znamená, že pre sláčiky 399 00:21:42,770 --> 00:21:45,410 už nie sú potrebné, ktoré majú byť vykonané. 400 00:21:45,410 --> 00:21:48,780 Ďalej sa to stalo, že je prípad, ktorý sme zmenili hodnotu aj 401 00:21:48,780 --> 00:21:53,270 kedy bol zdôraznený linka 17, čo bol okamih 402 00:21:53,270 --> 00:21:56,280 že pre vykonanie slučky bol v skutočnosti hodnotené. 403 00:21:56,280 --> 00:22:00,210 >> Keby som zmenil hodnotu aj na inej linke, povedzme 19, 404 00:22:00,210 --> 00:22:03,360 by sme videli iný správanie, pretože linka 19 by 405 00:22:03,360 --> 00:22:08,310 boli vykonané pred slučky podmienka bola prehodnotila. 406 00:22:08,310 --> 00:22:11,900 Teraz na tomto mieste, že som opäť, Na konci tohto programu. 407 00:22:11,900 --> 00:22:15,707 A môžem dovoliť to pristúpiť k aby môj program ukončiť prirodzene. 408 00:22:15,707 --> 00:22:18,290 Ale je tu pár vecí, ktoré sú dôležité, aby vzali 409 00:22:18,290 --> 00:22:19,960 z tohto konkrétneho rokovania. 410 00:22:19,960 --> 00:22:22,490 Je potrebné vyhodnotiť Vaše vlastné predpoklady 411 00:22:22,490 --> 00:22:24,710 o tom, ako by mal byť kód chová. 412 00:22:24,710 --> 00:22:28,220 Kedykoľvek si myslíte, že nejaký kus o kód viete, sa stane aj prácu, 413 00:22:28,220 --> 00:22:30,940 to by mohlo byť červená vlajka ísť dozadu a vyhodnocovať, a uistite sa, 414 00:22:30,940 --> 00:22:33,470 že vaše prevzatia ako tento kód funguje 415 00:22:33,470 --> 00:22:38,290 je vlastne pravda, ako to je vyjadrené v zdrojovom kóde. 416 00:22:38,290 --> 00:22:41,300 >> Ale ešte viac k bodu bol, keď sme pomocou debugger, 417 00:22:41,300 --> 00:22:43,920 si môžete dať na zarážky rôzne riadkov kódu, 418 00:22:43,920 --> 00:22:48,110 ktorý spôsobí, že ladiaci pauza vykonávanie v každom z týchto liniek 419 00:22:48,110 --> 00:22:52,210 takže môžete hodnotiť pamäte alebo dokonca ju zmeniť na svojom mieste. 420 00:22:52,210 --> 00:22:55,630 A opäť, nezabudnite, že môžete vytvoriť viac zarážky, aby ste 421 00:22:55,630 --> 00:23:00,390 Môžete tiež pokračovať v realizácii, preskočte cez veľké časti kódu, 422 00:23:00,390 --> 00:23:04,790 a to bude automaticky pozastaví pri ďalšom bodom zlomu. 423 00:23:04,790 --> 00:23:07,760 >> Tam je vlastne vyspelejšie funkcie ladiaci program, rovnako. 424 00:23:07,760 --> 00:23:10,170 Ale musíme vás odkázať niektorých ďalších videá 425 00:23:10,170 --> 00:23:14,090 aby sa skutočne dráždiť od seba, ako používať tieto konkrétne funkcie. 426 00:23:14,090 --> 00:23:15,990 Pre túto chvíľu, ďakujem moc za sledovanie. 427 00:23:15,990 --> 00:23:18,080 A veľa šťastia ladenie.