1 00:00:00,000 --> 00:00:00,309 2 00:00:00,309 --> 00:00:02,350 [? DAN ARMADARAS:?] Hi, Jaz sem [? Dan Armadaras?]. 3 00:00:02,350 --> 00:00:04,410 Danes bomo treba videti v razhroščevanje. 4 00:00:04,410 --> 00:00:06,697 Ne samo, da se bomo govorimo o nekaterih tehnikah, 5 00:00:06,697 --> 00:00:09,280 ampak gremo pogledati nekatere funkcije vseboval 6 00:00:09,280 --> 00:00:14,170 v CS50 IDE, ki omogočajo vam omogoča enostavno debug program. 7 00:00:14,170 --> 00:00:16,272 >> Samo en primer nekaj, kar bi lahko šlo narobe 8 00:00:16,272 --> 00:00:18,730 in da je dejansko nekaj da smo že videli. 9 00:00:18,730 --> 00:00:23,200 V tem primeru gre za C program da sprejme celo število od uporabnika, 10 00:00:23,200 --> 00:00:27,580 ga deli z dve in zagotavlja izhod nazaj uporabniku. 11 00:00:27,580 --> 00:00:30,610 Sedaj od tistega, kar smo videli prej na predavanjih, 12 00:00:30,610 --> 00:00:34,370 vemo, da se bo to dejansko povzroči posebne vrste težav delitve 13 00:00:34,370 --> 00:00:35,860 ko imamo lihe številke. 14 00:00:35,860 --> 00:00:40,330 >> Natančneje, bomo samo mečejo kaj decimalno vejico. 15 00:00:40,330 --> 00:00:43,170 Zdaj vemo, da je to se zgodi, da je tako. 16 00:00:43,170 --> 00:00:47,430 In če jo zaženete, lahko rečemo, naše sume, prvi, po zbiranju. 17 00:00:47,430 --> 00:00:50,460 In potem, s tekom in vnosom liho število. 18 00:00:50,460 --> 00:00:51,720 >> To ni nič novega. 19 00:00:51,720 --> 00:00:54,490 Ampak to je pravzaprav Primer hrošča, ki 20 00:00:54,490 --> 00:00:58,810 lahko obstaja znotraj večje programa da postane težje izslediti. 21 00:00:58,810 --> 00:01:02,640 Čeprav vemo, kaj je vprašanje je, pravi Bistvo zadeve 22 00:01:02,640 --> 00:01:06,250 morda poskušali identificirati še posebej, kjer se napaka pojavi, 23 00:01:06,250 --> 00:01:09,750 ugotavljanju, kaj je problem je, in ga nato pritrjevanje. 24 00:01:09,750 --> 00:01:14,400 Torej, zagotoviti to kot primer o tem, kaj bi lahko kaj 25 00:01:14,400 --> 00:01:19,030 da smo že vedeli, a se lahko pokopan v drugih elementih kode. 26 00:01:19,030 --> 00:01:23,090 >> Torej odpiranje ta drugi vir Koda datoteko kot primer, 27 00:01:23,090 --> 00:01:27,165 ta delitev problem je zdaj del večjega programa. 28 00:01:27,165 --> 00:01:29,040 Še vedno lahko malo bit izmišljene, in smo 29 00:01:29,040 --> 00:01:31,076 Morda bi lahko zlahka identificirati, še posebej, 30 00:01:31,076 --> 00:01:32,450 Ker smo pravkar razpravljali o tem. 31 00:01:32,450 --> 00:01:38,250 Vendar pa lahko ugotovimo, da je ta problem lahko obstaja v večjem obsegu. 32 00:01:38,250 --> 00:01:45,450 >> Če prevedem to in zdaj teči je, da vnesete liho število, 33 00:01:45,450 --> 00:01:49,816 lahko vidimo, da ne bomo dobili natančno izhod, ki smo ga lahko pričakuje. 34 00:01:49,816 --> 00:01:51,690 V tem konkretnem primeru, lahko bi rekli, da smo 35 00:01:51,690 --> 00:01:56,060 želite prešteti vse številke od enega do neke določeno številko. 36 00:01:56,060 --> 00:01:58,130 In vidimo, da smo imajo različne vprašanj 37 00:01:58,130 --> 00:02:03,880 tukaj, če smo prikazovanje, enostavno, 0 in 1 ko nudimo vhod 5. 38 00:02:03,880 --> 00:02:07,380 >> Tako že vemo, da tam je problem tukaj. 39 00:02:07,380 --> 00:02:11,662 Ampak mi ne vedo natančno kjer to vprašanje dejansko obstaja. 40 00:02:11,662 --> 00:02:13,620 Zdaj eden od načinov, da bomo poskušali popraviti to 41 00:02:13,620 --> 00:02:15,745 je nekaj, kar smo jih že predstavil. 42 00:02:15,745 --> 00:02:18,880 Mi lahko samo uporabljati v večjem obsegu. 43 00:02:18,880 --> 00:02:21,680 >> Na liniji 14, imamo ta funkcija printf, 44 00:02:21,680 --> 00:02:25,620 ki nam omogoča, da natisnete stanju različnih informacijami. 45 00:02:25,620 --> 00:02:28,880 In to je nekaj, kar vas bi moral finančni vzvod v vašem programu 46 00:02:28,880 --> 00:02:33,100 da bi poskušali ugotoviti, kaj je dogaja v različnih vrstic kode. 47 00:02:33,100 --> 00:02:36,350 Torej, čeprav to ni Končni rezultat, ki smo dejansko 48 00:02:36,350 --> 00:02:39,830 želijo proizvajati iz ta program, še vedno 49 00:02:39,830 --> 00:02:42,300 morda nekaj razhroščevanje Izjave Kje smo 50 00:02:42,300 --> 00:02:46,970 Lahko poskusite ugotoviti natančno, kaj se dogaja v notranjosti našega kodeksa. 51 00:02:46,970 --> 00:02:51,210 >> Torej, v tem primeru bom printf z debug oznako. 52 00:02:51,210 --> 00:02:53,540 V tem primeru gre Samo debug niz 53 00:02:53,540 --> 00:02:56,840 da sem gor-dajanje, tako da postane v proizvodnji moje kode zelo jasno 54 00:02:56,840 --> 00:02:59,200 kaj je to, da hočem pokazati. 55 00:02:59,200 --> 00:03:04,410 In izhodna tukaj številka da smo izračunali. 56 00:03:04,410 --> 00:03:06,800 >> V tem primeru, bom morda želijo natančno vedeti 57 00:03:06,800 --> 00:03:11,380 kaj se dogaja pred in Po nekaj posebnega računanja. 58 00:03:11,380 --> 00:03:16,224 Torej lahko uporabljam printf pred in po tem vrstico kode. 59 00:03:16,224 --> 00:03:18,640 V tem primeru, lahko sem celo da bo malo bolj jasno 60 00:03:18,640 --> 00:03:21,960 z besedami razhroščevanje pred in razhroščevanje po tako 61 00:03:21,960 --> 00:03:26,540 da ne bom sam zamenjati z več linij, ki so videti enaki. 62 00:03:26,540 --> 00:03:32,290 >> Zdaj, če bomo prevedite to in tek je ponovno vnesite številko kot pet, 63 00:03:32,290 --> 00:03:35,090 lahko vidimo, da imamo Sedaj izhod pred in po 64 00:03:35,090 --> 00:03:40,670 in ugotovili, da smo naredili jasno delitve ali jasno ob števila 65 00:03:40,670 --> 00:03:43,680 da dejansko želimo storiti. 66 00:03:43,680 --> 00:03:48,660 Sedaj v tem primeru pa je to ni res jasen izhod. 67 00:03:48,660 --> 00:03:52,440 To ni res jasen rezultat, ki želimo iz tega posebnega programa. 68 00:03:52,440 --> 00:03:54,427 >> To pa je spet, A malo izmišljene. 69 00:03:54,427 --> 00:03:57,510 Ampak, morda, je ena od stvari, ki kar lahko storimo, če specifikacija dejal 70 00:03:57,510 --> 00:04:01,900 da želimo deliti to z 2 in dodajte 1-- tako z drugimi besedami, 71 00:04:01,900 --> 00:04:04,550 želimo zaokrožiti up-- nato bomo morda vedeli, da smo lahko 72 00:04:04,550 --> 00:04:08,060 storiti, da se posebno stvar, v tem primeru. 73 00:04:08,060 --> 00:04:14,010 Zdaj tukaj vemo, da bomo lahko dodali 1 do našega prepolovil število. 74 00:04:14,010 --> 00:04:16,490 >> Naj prevedem to in potrdite, da je to 75 00:04:16,490 --> 00:04:18,860 se obnaša tako, kot smo želeli. 76 00:04:18,860 --> 00:04:21,980 Vidimo lahko, da je zdaj pred ob imamo številko 5. 77 00:04:21,980 --> 00:04:26,620 Po tem, ko smo imeli številko 3, ki po naši specifikaciji, 78 00:04:26,620 --> 00:04:29,292 je tisto, kar smo želeli storiti. 79 00:04:29,292 --> 00:04:31,000 Ampak, če pogledamo izhodna tukaj, smo lahko 80 00:04:31,000 --> 00:04:33,760 videti, da bi imeli drugo bug skupaj, kar je 81 00:04:33,760 --> 00:04:36,940 da smo z začetkom našega štetja od 0. 82 00:04:36,940 --> 00:04:39,390 >> Zdaj pa še enkrat, to je nekaj, da smo bili priča v preteklosti 83 00:04:39,390 --> 00:04:42,500 in ne moremo popraviti dokaj hitro. 84 00:04:42,500 --> 00:04:44,790 Toda v tem primeru smo imeli tudi koristi 85 00:04:44,790 --> 00:04:48,940 uporabe izjavo printf neposredno notranjost za zanke 86 00:04:48,940 --> 00:04:52,930 natančno vedeti, kje da je bila napaka, ki se pojavljajo. 87 00:04:52,930 --> 00:04:55,150 Torej printf izjave so zelo koristne pri 88 00:04:55,150 --> 00:04:57,940 lahko ugotovite, kje, Ravno v vaši izvorni kodi, 89 00:04:57,940 --> 00:05:00,620 specifična napaka se pojavlja. 90 00:05:00,620 --> 00:05:03,650 >> In to je tudi pomembno, da se zavedaš, da, kot smo pisno kodo, 91 00:05:03,650 --> 00:05:06,052 bomo morda imeli predpostavke o stanju programa. 92 00:05:06,052 --> 00:05:08,510 Ali lahko imamo predpostavke kaj del programa 93 00:05:08,510 --> 00:05:13,020 je dejansko pravilna ali napačna, ko kasneje kot smo gradili na tem programu 94 00:05:13,020 --> 00:05:15,950 in da bo del Kompleksna in večji programa 95 00:05:15,950 --> 00:05:19,700 da se zavedamo, da nekateri vidik od tega je dejansko buggy. 96 00:05:19,700 --> 00:05:22,680 >> Uporaba printf lahko resnično pomaga zožilo in identifikacijo 97 00:05:22,680 --> 00:05:26,430 regije program, ki ne sme je treba natančno obnaša tako, da smo 98 00:05:26,430 --> 00:05:29,500 pričakujejo, ki temelji na naših predpostavkah. 99 00:05:29,500 --> 00:05:31,460 Ampak tam je druga orodja voljo, kot tudi, 100 00:05:31,460 --> 00:05:34,860 ki nam omogočajo, da bi poskušali sliki tam, kjer do napake, ki se pojavljajo 101 00:05:34,860 --> 00:05:39,930 In tudi, natančneje, kakšne stvari se dogaja v notranjosti programa. 102 00:05:39,930 --> 00:05:41,990 >> Torej, z uporabo printf je zelo koristno, če želimo 103 00:05:41,990 --> 00:05:45,900 opredeliti posebna področja program, ki imajo neko napako. 104 00:05:45,900 --> 00:05:47,730 Ampak tudi postane dolgočasno čez nekaj časa. 105 00:05:47,730 --> 00:05:50,500 V tem primeru gre za relativno preprost program 106 00:05:50,500 --> 00:05:52,750 s samo enim ali dvema spremenljivkama. 107 00:05:52,750 --> 00:05:57,260 In to postane zelo enostavno za nas izpisal vrednost teh spremenljivk 108 00:05:57,260 --> 00:05:59,670 V okviru širšega programa. 109 00:05:59,670 --> 00:06:02,670 >> Vendar pa lahko imamo drugačen Program, ki ima veliko spremenljivk. 110 00:06:02,670 --> 00:06:06,530 In morda ne bo povsem tako preprost za uporabo printf 111 00:06:06,530 --> 00:06:10,120 da bi poskušali oceniti, kaj se dogaja za vsakega izmed teh spremenljivk 112 00:06:10,120 --> 00:06:13,590 kot program je izvršiteljica. 113 00:06:13,590 --> 00:06:16,960 Obstaja program, ki obstaja imenuje program razhroščevalnik. 114 00:06:16,960 --> 00:06:20,320 V tem primeru je tisti, ki bomo Uporaba je GNU razhroščevalnik, ali GDB, 115 00:06:20,320 --> 00:06:24,260 ki nam omogoča, da pregledujejo notranji Delovanje programa v veliko bolj 116 00:06:24,260 --> 00:06:25,700 Podroben način. 117 00:06:25,700 --> 00:06:28,810 >> Mi lahko dejansko izvršiti GDB v ukazni vrstici 118 00:06:28,810 --> 00:06:35,370 Tukaj ga preprosto tipkanje GDB in ukaz, da želimo, da debug. 119 00:06:35,370 --> 00:06:37,550 V tem primeru se šteje. 120 00:06:37,550 --> 00:06:41,650 Zdaj, v tem primeru, lahko vidimo, da je nas pripelje na poziv, ki pravi GDB. 121 00:06:41,650 --> 00:06:44,020 In bomo lahko dejansko izvajanje ukazov za GDB 122 00:06:44,020 --> 00:06:48,260 dejansko začne usmrtitve Program, nehaj na določenih mestih, 123 00:06:48,260 --> 00:06:51,060 ovrednotiti spremenljivk in pregledati spremenljivke, ki 124 00:06:51,060 --> 00:06:54,152 obstajajo v državi programa v tistem trenutku, 125 00:06:54,152 --> 00:06:55,110 in tako naprej in tako naprej. 126 00:06:55,110 --> 00:06:57,240 To zagotavlja veliko moči za nas. 127 00:06:57,240 --> 00:06:59,960 >> Ampak to samo zato, da se zgodi da CS50 IDE tudi 128 00:06:59,960 --> 00:07:05,870 omogoča GUI ali uporabnika vmesnik za GDB da 129 00:07:05,870 --> 00:07:11,120 nam omogoča, da to storijo brez potrebe v ukazni vrstici vmesnik whatsoever 130 00:07:11,120 --> 00:07:13,560 ali sploh še. 131 00:07:13,560 --> 00:07:16,930 Tako, da sem lahko dostopate da je s pomočjo gumba debug 132 00:07:16,930 --> 00:07:20,120 na samem vrhu CS50 IDE. 133 00:07:20,120 --> 00:07:24,280 Zdaj v preteklosti, kar imamo videti je, da bomo uporabili ukaz 134 00:07:24,280 --> 00:07:27,660 linije za sestavljanje in nato zaženite program. 135 00:07:27,660 --> 00:07:29,790 >> Gumb za iskanje napak ne oba od teh korakov. 136 00:07:29,790 --> 00:07:34,380 Ampak bo tudi bruhati Zavihek razhroščevalnik na skrajni desni 137 00:07:34,380 --> 00:07:38,280 ki nam omogoča, da pregledajo različne lastnosti programa 138 00:07:38,280 --> 00:07:40,500 saj je izvršiteljica. 139 00:07:40,500 --> 00:07:44,280 Če kliknem razhroščevanje, v tem Primer bo bruhati 140 00:07:44,280 --> 00:07:48,230 nov zavihek v konzoli Okno na samem dnu. 141 00:07:48,230 --> 00:07:51,160 >> In lahko vidite, da je ta zavihek nekatere informacije na samem vrhu. 142 00:07:51,160 --> 00:07:52,670 In smo lahko v veliki meri prezreti to. 143 00:07:52,670 --> 00:07:54,800 Toda ena od stvari da želimo obvestilo 144 00:07:54,800 --> 00:07:57,170 je, da oddaja ista stvar, ki smo 145 00:07:57,170 --> 00:08:03,000 bi dobili, če smo želeli teči, da na Program C v terminalskem oknu. 146 00:08:03,000 --> 00:08:06,230 >> Tu lahko vidimo, da je tekmovanje v teku Jek, in ima različne zastave, 147 00:08:06,230 --> 00:08:12,660 in je zbiranje našo count.c datoteko, ki je bil izbran zavihek v času 148 00:08:12,660 --> 00:08:15,100 da sem udaril razhroščevanje. 149 00:08:15,100 --> 00:08:18,010 Torej, to je zelo koristno, saj zdaj uporablja ta gumb debug, 150 00:08:18,010 --> 00:08:23,280 bomo lahko hkrati zbere in nato izvesti program, ki smo dejansko 151 00:08:23,280 --> 00:08:24,460 želite zagnati. 152 00:08:24,460 --> 00:08:27,880 >> Eden od zastave, ki je pomembno, v tem primeru, 153 00:08:27,880 --> 00:08:30,190 smo dejansko uporabo za najdaljši čas 154 00:08:30,190 --> 00:08:32,450 ampak samo naredil nekaj z roko mahal [neslišno], ki 155 00:08:32,450 --> 00:08:33,820 je to ena tukaj. 156 00:08:33,820 --> 00:08:35,790 V Jek, pravi -ggdb3. 157 00:08:35,790 --> 00:08:38,570 158 00:08:38,570 --> 00:08:41,250 V tem primeru, kar smo povedal Jek, naš prevajalnik, 159 00:08:41,250 --> 00:08:43,820 je, da želimo, da pripravijo svoj program. 160 00:08:43,820 --> 00:08:46,810 Ampak tudi, kaj so imenuje informacije simbol 161 00:08:46,810 --> 00:08:50,940 tako da dejansko ima prevajalnik dostop da veliko osnovnega informacij 162 00:08:50,940 --> 00:08:52,610 vsebovane v programu. 163 00:08:52,610 --> 00:08:55,260 >> Natančneje, število funkcij, ki jih imam, 164 00:08:55,260 --> 00:08:58,000 imena teh funkcij, spremenljivke, vrste 165 00:08:58,000 --> 00:09:01,730 da so te spremenljivke, in sorta drugih stvari, ki pomagajo razhroščevalnik 166 00:09:01,730 --> 00:09:04,350 opravlja svojo dejavnost. 167 00:09:04,350 --> 00:09:06,600 Zdaj pa še nekaj drugega da je pomembno omeniti 168 00:09:06,600 --> 00:09:10,280 ko smo razpravljali tek program na ta način. 169 00:09:10,280 --> 00:09:13,660 >> Opazimo, da je dejansko odraščali nov zavihek v našem konzole 170 00:09:13,660 --> 00:09:14,780 na dnu. 171 00:09:14,780 --> 00:09:18,600 Nimamo več za interakcijo neposredno s terminalskem oknu. 172 00:09:18,600 --> 00:09:21,420 Toda ta nov zavihek je pravzaprav okno terminal. 173 00:09:21,420 --> 00:09:26,710 Samo je specifična za delovanje Program, ki smo jih ustvarili. 174 00:09:26,710 --> 00:09:29,270 >> Opazimo, da pri dnu, v Kombinacija z nekaj izhodom 175 00:09:29,270 --> 00:09:33,500 s Jek prevajalnik in GDB, ki smo ga lahko v veliki meri prezreti, 176 00:09:33,500 --> 00:09:37,570 dejansko prikazuje izhod naš program na samem dnu. 177 00:09:37,570 --> 00:09:41,240 Zdaj je pomembno, da se zavedaš, da to eno okno dejansko 178 00:09:41,240 --> 00:09:43,360 vam bo pokazal Izhod iz programa 179 00:09:43,360 --> 00:09:47,190 ampak tudi lahko sprejemajo prispevke za ta program, kot dobro. 180 00:09:47,190 --> 00:09:49,260 >> Tako obvestilo, ki pravi, Prosimo vpišite številko, 181 00:09:49,260 --> 00:09:53,050 ki je enaka izhodni da smo imeli je imel v oknu terminala poprej. 182 00:09:53,050 --> 00:09:55,510 Ampak to je zdaj prikazano v tem novem zavihku. 183 00:09:55,510 --> 00:09:56,550 Jaz lahko vnesete številko. 184 00:09:56,550 --> 00:10:00,900 In da bo dejansko funkcija, kot smo pričakovali 185 00:10:00,900 --> 00:10:05,890 nam kaže našo razhroščevanje, proizvodnja, izhod, da bi bilo buggy, 186 00:10:05,890 --> 00:10:07,010 kot smo videli prej. 187 00:10:07,010 --> 00:10:10,460 In na samem dnu, ga dejansko ima nekaj dodatnega izhoda 188 00:10:10,460 --> 00:10:14,550 od BDP, samo pravim, da je Ta program je končan. 189 00:10:14,550 --> 00:10:16,655 >> Zdaj, kot ste videli, v tem zlasti teči skozi, 190 00:10:16,655 --> 00:10:19,370 ni bilo posebej koristno, saj tudi 191 00:10:19,370 --> 00:10:23,740 čeprav smo imeli priti meni razhroščevalnik navzgor, je to še vedno program teče. 192 00:10:23,740 --> 00:10:26,790 Na nobenem mestu to storil dejansko premor izvedbe za nas 193 00:10:26,790 --> 00:10:30,767 da se lahko pregledajo vse spremenljivke vsebovane znotraj. 194 00:10:30,767 --> 00:10:32,850 Še nekaj da moramo storiti, da bi 195 00:10:32,850 --> 00:10:36,910 priti GDB priznati, da želimo da prekinete izvajanje programa 196 00:10:36,910 --> 00:10:42,820 in ne le omogoča, da nadaljuje praviloma kot bi mi v vseh drugih primerih. 197 00:10:42,820 --> 00:10:45,530 >> Da bi premor izvršitve, na neki določeni progi, 198 00:10:45,530 --> 00:10:47,830 moramo ustvariti tisto, kar je imenuje prelomna točka. 199 00:10:47,830 --> 00:10:52,670 In je prelomna točka zelo enostavno ustvaril V tem CS50 IDE ob miško 200 00:10:52,670 --> 00:10:57,090 in kliknete neposredno na levi nekega določenega števila linije. 201 00:10:57,090 --> 00:10:59,920 Ko sem to naredil, rdeča pika Zdi se, kar kaže na 202 00:10:59,920 --> 00:11:02,300 da je ta linija sedaj prelomna točka. 203 00:11:02,300 --> 00:11:07,540 >> In naslednjič, ko sem teči GDB ga, bo ustavilo usmrtitev na tej točko lomljenja 204 00:11:07,540 --> 00:11:10,280 ko doseže to vrstico kode. 205 00:11:10,280 --> 00:11:12,230 Zdaj je to pomembno stvar, da se zavedaš, 206 00:11:12,230 --> 00:11:16,140 da to ni nujno velja, da je vsaka vrstica kode 207 00:11:16,140 --> 00:11:17,880 je dejansko dostopna. 208 00:11:17,880 --> 00:11:23,780 Če bi bil jaz ustvariti funkcijo tu gor, za example-- void F- 209 00:11:23,780 --> 00:11:31,230 in samo narediti tiskanja linijo here-- zdravo world-- če nisem poklical to funkcijo, 210 00:11:31,230 --> 00:11:34,770 da bo v primeru, da je če sem nastavil točko lomljenja tukaj, 211 00:11:34,770 --> 00:11:36,220 funkcija ne bo nikoli poklical. 212 00:11:36,220 --> 00:11:38,310 In zato ta zlasti prelomna točka 213 00:11:38,310 --> 00:11:43,040 v resnici nikoli ne bo premor izvajanje programa. 214 00:11:43,040 --> 00:11:48,020 >> Torej, recimo, da sem se pravilno ustvarjanje prelom točka na neki vrstico kode 215 00:11:48,020 --> 00:11:50,340 da bo dejansko izveden. 216 00:11:50,340 --> 00:11:53,470 Sedaj je v tem primeru je to Prva vrstica v glavno funkcijo. 217 00:11:53,470 --> 00:11:56,630 Torej bo to zagotovo zgodilo da, takoj ko začnem izvršitve, 218 00:11:56,630 --> 00:11:58,580 zelo prva linija bo dosežen. 219 00:11:58,580 --> 00:12:00,230 GDB bo premor izvršitve. 220 00:12:00,230 --> 00:12:04,100 In potem bom lahko interakcijo z razhroščevalnik. 221 00:12:04,100 --> 00:12:08,480 >> Nastavite lahko več vrstic kot Mejni vrednosti, če bi želeli. 222 00:12:08,480 --> 00:12:11,365 Mi lahko ustvarite tudi linijo gor Tukaj v tem segmentu kode 223 00:12:11,365 --> 00:12:12,490 da ne bodo nikoli dosegli. 224 00:12:12,490 --> 00:12:14,744 In bomo lahko tudi v nadaljevanju določiti enega. 225 00:12:14,744 --> 00:12:16,660 Razlog, da smo bi želite to bomo storili 226 00:12:16,660 --> 00:12:19,119 iti v malo več detajl v samo trenutek. 227 00:12:19,119 --> 00:12:21,660 Torej za zdaj, povej mi samo onemogočiti ti dodatni odmor točk 228 00:12:21,660 --> 00:12:24,940 tako da bomo lahko pogledali, kaj se dogaja ko imam en sam odmor 229 00:12:24,940 --> 00:12:27,650 točka v mojem programu. 230 00:12:27,650 --> 00:12:29,410 Naredil sem nekaj spremembe tega programa. 231 00:12:29,410 --> 00:12:30,750 Torej rabim, da ga shranite. 232 00:12:30,750 --> 00:12:34,490 Bom kliknite razhroščevanje, tako da sem lahko začnete s sestavljanjem in potem 233 00:12:34,490 --> 00:12:36,880 izvedba razhroščevalnik. 234 00:12:36,880 --> 00:12:40,632 >> Videli bomo, da se po nekaj trenutkih, v črta, ki smo izbrali kot počitek 235 00:12:40,632 --> 00:12:43,360 točka je označena z rumeno barvo. 236 00:12:43,360 --> 00:12:47,440 Prav tako lahko opazimo, da je v zgornji desni v debug plošči 237 00:12:47,440 --> 00:12:50,940 da je ikona za pavzo obrnil v malo ikono za predvajanje. 238 00:12:50,940 --> 00:12:54,710 To pomeni, da imamo premor izvedba, v tem konkretnem primeru. 239 00:12:54,710 --> 00:12:57,840 In hitting gumb Predvajaj bi Dovolite nam, da nadaljuje izvajanje 240 00:12:57,840 --> 00:13:00,000 na tej določeni točki. 241 00:13:00,000 --> 00:13:03,240 >> Opazite, da je nekaj drugega Gumbi so na voljo v tem debug plošči, 242 00:13:03,240 --> 00:13:04,220 kot dobro. 243 00:13:04,220 --> 00:13:09,470 Korak več, ki mi omogoča, da izvršiti to eno vrstico kode 244 00:13:09,470 --> 00:13:14,030 in korak več, da te črte na Naslednji on, ki je v tem primeru, 245 00:13:14,030 --> 00:13:17,060 bi pomenilo, da je printf Izjava se izvaja. 246 00:13:17,060 --> 00:13:22,310 In bo potem pavza izvršba na liniji 13, kot tako. 247 00:13:22,310 --> 00:13:25,090 >> In tam je tudi korak v funkciji, ki je 248 00:13:25,090 --> 00:13:28,950 je koristno, če sem ustvaril drugo Funkcije drugje v izvorno kodo. 249 00:13:28,950 --> 00:13:31,420 In želim, da stopite v te funkcije namesto 250 00:13:31,420 --> 00:13:33,050 izvršiti to funkcijo kot celote. 251 00:13:33,050 --> 00:13:37,279 Vendar bomo videti bolj v koraku v funkcijo v samo trenutek. 252 00:13:37,279 --> 00:13:40,320 Zdaj opazili nekaj drugih stvari, ki jih dejansko obstajajo v tem debug plošči. 253 00:13:40,320 --> 00:13:44,110 >> Imamo to plošča imenuje klic stack, ki nam pokaže, 254 00:13:44,110 --> 00:13:45,300 kje smo točno. 255 00:13:45,300 --> 00:13:48,550 V tem primeru smo v notranjosti glavne funkcije. 256 00:13:48,550 --> 00:13:50,880 Naš scenarij se imenuje count.c. 257 00:13:50,880 --> 00:13:53,820 In se zgodi, da se na vrstica 13, stolpec ena, ki 258 00:13:53,820 --> 00:13:58,950 Ravno to pa je izpostavil regija izvorne kode nakazuje, kot dobro. 259 00:13:58,950 --> 00:14:02,435 >> Zdaj opazili, da tudi to kaže pod lokalnim spremenljivim prečnim 260 00:14:02,435 --> 00:14:06,710 vse spremenljivke, ki obstajajo v tej funkciji. 261 00:14:06,710 --> 00:14:08,930 Pomembno je omeniti, da so vse spremenljivke 262 00:14:08,930 --> 00:14:12,580 se bo pojavil v tej lokalni spremenljivki poglavje v funkciji 263 00:14:12,580 --> 00:14:14,380 še preden so opredeljena. 264 00:14:14,380 --> 00:14:19,160 Mi lahko vidite tukaj, da imamo spremenljivko imenuje num, ima privzeto vrednost 0, 265 00:14:19,160 --> 00:14:21,280 in je tipa int. 266 00:14:21,280 --> 00:14:24,110 >> Zdaj pa, preden smo dejansko inicializacijo vseh teh spremenljivk, 267 00:14:24,110 --> 00:14:26,685 nismo nujno zagotovljeno, da vidim vrednost 0. 268 00:14:26,685 --> 00:14:29,200 In odvisno od drugih usmrtitvah ki ste jih opravili 269 00:14:29,200 --> 00:14:32,020 in stanje vašega pomnilnika, ko ste dejansko zagnati ta program, 270 00:14:32,020 --> 00:14:34,605 boste morda ugotovili, da vas ne vidim vrednosti 0 271 00:14:34,605 --> 00:14:36,550 in namesto tega nekatere druge nore številke. 272 00:14:36,550 --> 00:14:38,390 >> Ampak ne skrbi. 273 00:14:38,390 --> 00:14:44,610 To se ne dogaja, da so pomembni, dokler ste dejansko inicializirati vrednost. 274 00:14:44,610 --> 00:14:49,630 Zdaj, v tem primeru, lahko vidimo, da Imam izvedli nekaj izhodov. 275 00:14:49,630 --> 00:14:52,131 In jaz, prav zdaj, zaustavljenih izvršitve. 276 00:14:52,131 --> 00:14:53,880 Toda v tem primeru, kar Res želite storiti 277 00:14:53,880 --> 00:14:58,060 je zdaj korak v tej vrstici kode, tako da sem lahko dejansko 278 00:14:58,060 --> 00:15:04,390 poizvedbo uporabnika za to notr, da želimo uporabiti v našem programu. 279 00:15:04,390 --> 00:15:07,060 >> Sedaj je v tem primeru, ko Zadel sem stopiti čez, obvestila 280 00:15:07,060 --> 00:15:11,940 da Pause oziroma Nadaljuj Gumb se je spremenilo na ta gumb Pause 281 00:15:11,940 --> 00:15:14,022 ker ta oznaka se dejansko izvršuje. 282 00:15:14,022 --> 00:15:15,730 Kaj se dogaja Trenutno je, da je 283 00:15:15,730 --> 00:15:21,630 čaka na nas, da vnesete nekaj informacij Kot lahko vidimo, ki jih naše izhodne besedilom 284 00:15:21,630 --> 00:15:23,600 na dnu. 285 00:15:23,600 --> 00:15:25,787 >> Torej zdaj, to je dejansko ni zaustavljena, 286 00:15:25,787 --> 00:15:28,620 čeprav to, nekako se zdi, da je, ker se nič ne dogaja. 287 00:15:28,620 --> 00:15:32,360 Vendar je prav tako se zgodi, da se v moj posebni primer na liniji 13, 288 00:15:32,360 --> 00:15:34,210 Čakam vnos uporabnika. 289 00:15:34,210 --> 00:15:39,130 In tako GDB ne more pregledati program, saj je tekmovanje v teku. 290 00:15:39,130 --> 00:15:43,370 >> Zdaj, ko naslednjič vnesem nekaj input-- zato bom vnesite to številko 5, 291 00:15:43,370 --> 00:15:46,140 kot smo videli v past-- sprašuje nazaj, in smo 292 00:15:46,140 --> 00:15:51,430 obvestilo, da mora takoj, GDB premore in ponovno opozarja na naslednjo vrstico. 293 00:15:51,430 --> 00:15:55,320 Ampak obvestilo, da je zdaj, kot Rezultat naše vnosom vrednosti, 294 00:15:55,320 --> 00:15:58,930 Posodobili smo to vrednost v notranjosti naših lokalnih spremenljivk, ki 295 00:15:58,930 --> 00:16:05,560 je zelo uporaben za natančno vedeti kaj ta številka je bila v pomnilniku. 296 00:16:05,560 --> 00:16:10,650 >> Zdaj lahko omogoči ta program, da nadaljuje igranje do konca njegovo izvedbo 297 00:16:10,650 --> 00:16:12,570 s pritiskom Nadaljuj. 298 00:16:12,570 --> 00:16:16,410 Vidimo lahko, da je zelo hitro počne program konča izvršitve 299 00:16:16,410 --> 00:16:19,790 z isto izhodno da smo je imel prej, razhroščevalnik zapre, 300 00:16:19,790 --> 00:16:23,170 in sedaj ta program se je popolnoma ustavil. 301 00:16:23,170 --> 00:16:25,320 >> I kažejo, da le za Nameni videli, kaj 302 00:16:25,320 --> 00:16:27,280 se zgodi, ko smo dejansko hit Nadaljuj. 303 00:16:27,280 --> 00:16:30,640 Vendar smo dejansko se dogaja, da želijo iti nazaj v ta program 304 00:16:30,640 --> 00:16:33,820 tako da bomo lahko poskusite debug natančno, kaj se dogaja. 305 00:16:33,820 --> 00:16:37,980 Zdaj, ko sem z razhroščevalnik, smem te izjave debug printf ne potrebujete. 306 00:16:37,980 --> 00:16:43,860 >> Torej sem jih lahko odstranite tako bom naredil zdaj samo, da se vrnete na našo enostavnejši kodo 307 00:16:43,860 --> 00:16:45,950 da smo imeli pred nekaj trenutki. 308 00:16:45,950 --> 00:16:48,790 Zdaj, ko sem shranite program in ga izvršiti, 309 00:16:48,790 --> 00:16:53,700 to bo, še enkrat, pojdite na to začetnica prekinil točko, ki sem ga imel na liniji 11. 310 00:16:53,700 --> 00:16:57,700 In bom lahko vpogleda moje spremenljivke, kot si želim. 311 00:16:57,700 --> 00:17:00,695 >> Samo tako se zgodi, da to del ni zelo zanimivo, 312 00:17:00,695 --> 00:17:04,364 In vem, da bom natisniti to izjavo. 313 00:17:04,364 --> 00:17:05,280 Prosimo vpišite številko. 314 00:17:05,280 --> 00:17:08,099 In potem, vem, da bom vprašati uporabnika za to število. 315 00:17:08,099 --> 00:17:13,329 Torej, morda sem dejansko želijo, da se premaknete my prekinil točko malo niže. 316 00:17:13,329 --> 00:17:16,710 >> Lahko odstranite premorov točke s klikom, še enkrat, neposredno 317 00:17:16,710 --> 00:17:18,460 na levi strani te številke linije. 318 00:17:18,460 --> 00:17:22,200 Da rdeča pika bo izginila, kar pomeni, da je ta prelomna točka sedaj šla. 319 00:17:22,200 --> 00:17:24,780 Sedaj je v tem primeru, izvedba je bila začasno ustavljena. 320 00:17:24,780 --> 00:17:27,770 In tako da je dejansko ne bo nadaljeval v tem konkretnem primeru. 321 00:17:27,770 --> 00:17:30,210 Ampak jaz lahko nastavite odmor točka a malo kasneje. 322 00:17:30,210 --> 00:17:33,880 >> In ko sem zdaj spet moj koda, se bo nadaljevala in povej 323 00:17:33,880 --> 00:17:36,190 točka te prekinitve točke. 324 00:17:36,190 --> 00:17:37,374 Spet sem udaril Nadaljuj. 325 00:17:37,374 --> 00:17:39,040 Ne zdi kaj se dogaja. 326 00:17:39,040 --> 00:17:41,450 Ampak to je, ker je moj koda čaka na vhodu. 327 00:17:41,450 --> 00:17:47,900 Bom vpišite številko 5, zadeti nastopiti, in Zdaj bo naslednja prelomna točka hit. 328 00:17:47,900 --> 00:17:50,570 >> Sedaj je v tem primeru pa je to je vrstica kode 329 00:17:50,570 --> 00:17:53,820 da je, preden smo vedeli, se je zgodilo, da je buggy. 330 00:17:53,820 --> 00:17:57,590 Torej, kaj je oceniti, kaj se zgodi v tem določenem trenutku. 331 00:17:57,590 --> 00:18:02,620 Ko je poudarjena linija, to linija še ni bila izvedena. 332 00:18:02,620 --> 00:18:06,490 Torej, v tem primeru lahko vidimo, da imam številko, ki 333 00:18:06,490 --> 00:18:11,610 Imam celo imenovano num, ki ima vrednost 5. 334 00:18:11,610 --> 00:18:15,090 In bom se opravlja nekaj matematike na to številko. 335 00:18:15,090 --> 00:18:20,130 >> Če stopim več, da bomo lahko opazili, da je bila vrednost za num 336 00:18:20,130 --> 00:18:23,780 se je spremenila v skladu z aritmetična da smo dejansko storili. 337 00:18:23,780 --> 00:18:26,810 In sedaj, ko smo Notranjost tega za zanke 338 00:18:26,810 --> 00:18:29,090 ali je sedaj, da se za zanko sam je poudaril, 339 00:18:29,090 --> 00:18:32,450 vidimo, da imamo novo spremenljivka Poklicala sem, da 340 00:18:32,450 --> 00:18:35,370 se bo treba uporabiti, da se za zanko. 341 00:18:35,370 --> 00:18:38,230 >> Zdaj pa ne pozabite pred tem I je omenil, da se včasih ste 342 00:18:38,230 --> 00:18:43,470 videli nekakšen nor številke kot privzeto pred to številko 343 00:18:43,470 --> 00:18:45,530 ali da spremenljivka dejansko inicializiran. 344 00:18:45,530 --> 00:18:49,040 Mi lahko natančno videli, da tukaj v tej spremenljivki 345 00:18:49,040 --> 00:18:51,345 Poklical sem, ki nima ni bil inicializiran 346 00:18:51,345 --> 00:18:53,560 ob poudari. 347 00:18:53,560 --> 00:18:57,070 Vendar lahko vidimo, da ima nekaj več da mi ne bi bilo pravzaprav pričakovati. 348 00:18:57,070 --> 00:18:57,620 >> To je ok. 349 00:18:57,620 --> 00:18:59,661 Ne skrbite saj imamo dejansko ne 350 00:18:59,661 --> 00:19:04,970 inicializiran to število do I korak čez to linijo in vrednostjo 351 00:19:04,970 --> 00:19:08,560 i je inicializiran na vrednost 1. 352 00:19:08,560 --> 00:19:11,400 Tako da vidim, da je to dejansko v primeru, kaj je korak več. 353 00:19:11,400 --> 00:19:14,420 Sedaj lahko vidite, da je ta Vrstica je bila izvedena. 354 00:19:14,420 --> 00:19:17,000 In zdaj poudarjanje to printf črta. 355 00:19:17,000 --> 00:19:22,230 >> In zdaj lahko vidite, kako naše vrednote za i in 3 so se sčasoma spremenili. 356 00:19:22,230 --> 00:19:26,450 To je zelo koristno, da ne, dejansko je, da stopite preko linije večkrat. 357 00:19:26,450 --> 00:19:30,480 In jih lahko najdete, kaj dejansko se dogaja v notranjosti vašega za zanke 358 00:19:30,480 --> 00:19:33,660 in kaj se zgodi na spremenljivke v notranjosti, da je za zanke 359 00:19:33,660 --> 00:19:39,200 kot to izvedbo programa pojavi en korak naenkrat. 360 00:19:39,200 --> 00:19:41,110 >> Sedaj na tej točki, sem stopil čez ravno dovolj 361 00:19:41,110 --> 00:19:44,210 da sem zdaj jaz na koncu mojega programa. 362 00:19:44,210 --> 00:19:46,980 Če stopim več, da se bo to dejansko preneha izvajanje 363 00:19:46,980 --> 00:19:48,860 kot smo videli v preteklosti. 364 00:19:48,860 --> 00:19:52,110 Naj ponovno zaženete to, še enkrat, tako da da sem lahko kažejo nekaj drugega ven, 365 00:19:52,110 --> 00:19:53,320 kot dobro. 366 00:19:53,320 --> 00:19:55,350 >> V tem primeru je zdaj me sprašuješ, še enkrat, 367 00:19:55,350 --> 00:19:57,100 za številne, ki Bom spet začne. 368 00:19:57,100 --> 00:20:00,300 Ampak tokrat, bom za vstop v večje število, tako da je za zanko 369 00:20:00,300 --> 00:20:02,540 bo Ponovil večkrat. 370 00:20:02,540 --> 00:20:06,090 V tem primeru, jaz grem vnesti vrednost 11. 371 00:20:06,090 --> 00:20:08,390 >> Zdaj pa še enkrat, ker bi jaz nastavljen prelom točka na liniji 15, 372 00:20:08,390 --> 00:20:10,490 to se dogaja, da označite to vrstico. 373 00:20:10,490 --> 00:20:12,980 Vidimo, da je naša Številka 11 je pravilno 374 00:20:12,980 --> 00:20:15,560 zastopani v naših lokalnih spremenljivk. 375 00:20:15,560 --> 00:20:22,460 Stepping preko tega, da smo zdaj lahko opazujte, kaj se dogaja z našo vrednosti i 376 00:20:22,460 --> 00:20:25,680 kot smo nadaljevali znotraj tega za zanke. 377 00:20:25,680 --> 00:20:31,960 To gets poveča vsakič, ko smo dosežejo vrh, ki za zanke. 378 00:20:31,960 --> 00:20:35,110 >> Zdaj pa ena od stvari, ki bi lahko koristno narediti med izvajanjem 379 00:20:35,110 --> 00:20:40,490 tega programa je za mene, da dejansko spremenite spremenljivk midstream videti 380 00:20:40,490 --> 00:20:42,450 kaj se zgodi z mojim programom. 381 00:20:42,450 --> 00:20:46,540 V tem primeru sem lahko dejansko dvokliknite vrednost. 382 00:20:46,540 --> 00:20:48,040 Obvestilo, da postane polje za besedilo. 383 00:20:48,040 --> 00:20:50,280 >> Zdaj lahko vnesete drugačno vrednost skupaj 384 00:20:50,280 --> 00:20:55,700 da vidim, kako moj program obnaša ko sem spremenil to spremenljivko. 385 00:20:55,700 --> 00:20:59,560 Sedaj je v tem primeru, je spremenljivka i zdaj vsebuje vrednost 10. 386 00:20:59,560 --> 00:21:02,810 Toda program še zamrznili izvršbe. 387 00:21:02,810 --> 00:21:07,610 Ko stopim več, vidim, da je vrednost i, ki sem vstopil kot 10, 388 00:21:07,610 --> 00:21:12,170 ni večja od vrednosti num, ki takoj povzroči, da se za zanko 389 00:21:12,170 --> 00:21:14,240 za ustavitev izvršitve. 390 00:21:14,240 --> 00:21:16,210 >> Zdaj to ni edini Razlog, zakaj bi jih 391 00:21:16,210 --> 00:21:19,450 želeli spremeniti spremenljivko prosto. 392 00:21:19,450 --> 00:21:22,210 Morda boste dejansko želijo poskusiti, da ga spremeni tako, 393 00:21:22,210 --> 00:21:24,590 da lahko še naprej Izvršitev zanke 394 00:21:24,590 --> 00:21:27,370 ali pa tako, da lahko spremenite nekatere vrednosti pred njo 395 00:21:27,370 --> 00:21:32,630 doseže neko poseben sklop aritmetike da ste o tem opravljati. 396 00:21:32,630 --> 00:21:36,210 >> Torej sedaj, da smo dejansko spremeniti Vrednost i, kot je program bil izvršitve, 397 00:21:36,210 --> 00:21:39,540 je povzročila, da je za zanke, da zaprete prezgodaj, saj kar naenkrat, i 398 00:21:39,540 --> 00:21:42,770 zgodilo, da se večja od vrednosti NUM, kar pomeni, da je ta za zanko 399 00:21:42,770 --> 00:21:45,410 ni več potrebno, da se izvrši. 400 00:21:45,410 --> 00:21:48,780 Nadalje se je zgodilo, da je Primer, ki smo spremenili vrednost I 401 00:21:48,780 --> 00:21:53,270 ko je bila poudarjena linija 17, kar je trenutek 402 00:21:53,270 --> 00:21:56,280 da je za izvedbo zanke je dejansko ocenili. 403 00:21:56,280 --> 00:22:00,210 >> Če bi spremenili vrednost i na drugo linijo, recimo 19, 404 00:22:00,210 --> 00:22:03,360 smo bi videli drugačen vedenje, ker linija 19 bi 405 00:22:03,360 --> 00:22:08,310 se izvrši pred zanko pogoj je bil prevrednotujejo. 406 00:22:08,310 --> 00:22:11,900 Sedaj na tej točki, da sem, še enkrat, Na koncu tega programa. 407 00:22:11,900 --> 00:22:15,707 In ne morem dopustiti, da nadaljuje dovolite moj program za naravno zaprete. 408 00:22:15,707 --> 00:22:18,290 Toda obstaja nekaj stvari, ki so pomembni za odvoz 409 00:22:18,290 --> 00:22:19,960 od tem razprave. 410 00:22:19,960 --> 00:22:22,490 Morate oceniti lastne predpostavke 411 00:22:22,490 --> 00:22:24,710 o tem, kako koda je treba obnašati. 412 00:22:24,710 --> 00:22:28,220 Vsak čas menite, da so nekateri kos o koda veste, se zgodi na delo, 413 00:22:28,220 --> 00:22:30,940 da je lahko rdeča zastava iti nazaj in oceniti, in se prepričajte, 414 00:22:30,940 --> 00:22:33,470 da vaši predpostavki kako da koda deluje 415 00:22:33,470 --> 00:22:38,290 je dejansko res, kako je izraženo v izvorni kodi. 416 00:22:38,290 --> 00:22:41,300 >> Ampak še bolj na mestu je, ko smo z razhroščevalnik, 417 00:22:41,300 --> 00:22:43,920 lahko postavite prelomnih točk na različnih vrstic kode, 418 00:22:43,920 --> 00:22:48,110 ki bo povzročila razhroščevalnik do premor usmrtitev na vsaki od teh vrstic 419 00:22:48,110 --> 00:22:52,210 tako da lahko oceni spomin ali celo spremeniti v mestu. 420 00:22:52,210 --> 00:22:55,630 In še enkrat, ne pozabite, da lahko ustvariti več prelomnih točk, tako da boste 421 00:22:55,630 --> 00:23:00,390 Lahko tudi nadaljevanje izvedbe, preskočite na velikih delov kode, 422 00:23:00,390 --> 00:23:04,790 in ga bomo samodejno pavzo na naslednji točko lomljenja. 423 00:23:04,790 --> 00:23:07,760 >> Tam je dejansko bolj napredni lastnosti razhroščevalnik, kot tudi. 424 00:23:07,760 --> 00:23:10,170 Bom, ampak bomo morali sklicevati nekaterih poznejših videoposnetkov 425 00:23:10,170 --> 00:23:14,090 da bi res draži narazen, kako za uporabo te posebne funkcije. 426 00:23:14,090 --> 00:23:15,990 Za zdaj, hvala zelo veliko za gledanje. 427 00:23:15,990 --> 00:23:18,080 In srečno razhroščevanje.