1 00:00:00,000 --> 00:00:05,640 2 00:00:05,640 --> 00:00:06,830 >> Doug LLOYD: Vredu GDB. 3 00:00:06,830 --> 00:00:08,480 Kaj je to točno? 4 00:00:08,480 --> 00:00:11,310 Torej GDB, ki stoji za GNU Debugger, 5 00:00:11,310 --> 00:00:15,040 je res super orodje, da bomo lahko uporabiti, da nam pomagajo debug naše programe, 6 00:00:15,040 --> 00:00:18,210 ali kje so stvari narobe v naših programih. 7 00:00:18,210 --> 00:00:22,590 GDB je neverjetno močan, vendar proizvodnja in interakcija z njim 8 00:00:22,590 --> 00:00:23,830 mogoče malo skrivnosten. 9 00:00:23,830 --> 00:00:28,210 To je običajno črta orodje ukaz, in lahko vrgel veliko sporočil na vas. 10 00:00:28,210 --> 00:00:31,144 In to lahko nekako težko razčleniti, kaj se dogaja. 11 00:00:31,144 --> 00:00:33,560 Na srečo smo sprejeti ukrepe da se določi ta problem za vas 12 00:00:33,560 --> 00:00:36,281 kot delate skozi CS50. 13 00:00:36,281 --> 00:00:39,030 Če ne uporabljate grafičnega razhroščevalnik, ki je moj kolega Dan 14 00:00:39,030 --> 00:00:41,570 Armandarse je precej govoril malo o tem v videoposnetku, ki 15 00:00:41,570 --> 00:00:44,740 bi morala biti tukaj zdaj, boste morda morali 16 00:00:44,740 --> 00:00:48,270 Za uporabo te ukazno vrstico orodja za delo z GDB. 17 00:00:48,270 --> 00:00:51,250 Če delate v CS50 IDE, vam ni treba, da to storijo. 18 00:00:51,250 --> 00:00:53,550 Ampak, če niste delajo v CS50 IDE, 19 00:00:53,550 --> 00:00:55,750 morda z uporabo različico od CS50 Appliance, 20 00:00:55,750 --> 00:00:58,860 ali drugo Linux operacijski Sistem z GDB nameščen na njej, 21 00:00:58,860 --> 00:01:00,980 boste morda morali uporabiti ta orodja ukazni vrstici. 22 00:01:00,980 --> 00:01:02,860 >> In ker boste morda morali storiti, da, to je 23 00:01:02,860 --> 00:01:06,280 koristno, da bi razumeli, kako GDB deluje v ukazni vrstici. 24 00:01:06,280 --> 00:01:09,650 Ampak še enkrat, če ste pomočjo CS50 IDE, si 25 00:01:09,650 --> 00:01:15,400 Lahko uporabite grafični razhroščevalnik ki je vgrajen v IDE. 26 00:01:15,400 --> 00:01:18,750 Torej, da se stvari dogaja z GDB, da začnete razhroščevanje 27 00:01:18,750 --> 00:01:21,220 Postopek posebno Program, vse, kar morate storiti, 28 00:01:21,220 --> 00:01:23,810 je tip GDB sledila z imenom programa. 29 00:01:23,810 --> 00:01:28,620 Tako, na primer, če je vaš program zdravo, bi vnesete GDB zdravo. 30 00:01:28,620 --> 00:01:31,210 >> Ko boste to storili, boste potegnite navzgor GDB okolje. 31 00:01:31,210 --> 00:01:33,800 Vaš hiter bo spremenilo, in namesto da bi tisto, kar je običajno 32 00:01:33,800 --> 00:01:35,841 je, ko vnesete stvari V ukazni line-- ls, 33 00:01:35,841 --> 00:01:38,115 CD- vse vaš tipičen Linux ukazi, svoj poziv 34 00:01:38,115 --> 00:01:42,200 se bo spremenila, verjetno nekaj kot je oklepaju GDB oklepajih. 35 00:01:42,200 --> 00:01:46,630 To je vaš novi GDB hitro, saj ste v notranjosti GDB okolje. 36 00:01:46,630 --> 00:01:49,830 Ko znotraj tega okolja, tam je dve veliki ukazi 37 00:01:49,830 --> 00:01:52,290 da boste verjetno uporabili v tem vrstnem redu. 38 00:01:52,290 --> 00:01:55,200 >> Prvi je b, ki je okrajšava za počitek. 39 00:01:55,200 --> 00:01:58,690 In ko tip B, ki jih običajno vnesite ime funkcije, 40 00:01:58,690 --> 00:02:01,040 ali pa če se zgodi, da veš okoli kakšna številka vrstice 41 00:02:01,040 --> 00:02:04,100 vaš program se začenja obnašati malo čudno, 42 00:02:04,100 --> 00:02:06,370 lahko vnesete linijo Številka tudi tam. 43 00:02:06,370 --> 00:02:09,660 Kaj b, ali odmor, ne je to omogoča vaš program 44 00:02:09,660 --> 00:02:13,270 teči do določene točke, sicer ime funkcije 45 00:02:13,270 --> 00:02:15,880 ki ste jo določili, ali je linija Številka, ki ste jo določili. 46 00:02:15,880 --> 00:02:18,590 >> In na tej točki, da zamrzne izvajanje. 47 00:02:18,590 --> 00:02:21,670 To je res dobra stvar, saj ko je izvedba zamrznjen, 48 00:02:21,670 --> 00:02:25,214 lahko začnete zelo počasi stopite skozi svoj program. 49 00:02:25,214 --> 00:02:28,130 Značilno je, če ste bili teče vaši programi, oni so zelo kratki. 50 00:02:28,130 --> 00:02:31,250 Ponavadi, ko tipkate dot poševnica karkoli ime vašega programa, pritisnite tipko Enter, 51 00:02:31,250 --> 00:02:33,470 in preden boste lahko utripajo, vaš Program je že končal. 52 00:02:33,470 --> 00:02:36,620 To ni res veliko časa, da poskusite in ugotoviti, kaj je šlo narobe. 53 00:02:36,620 --> 00:02:40,920 Torej je res, da se lahko stvari počasi dol z določitvijo točko lomljenja z b, 54 00:02:40,920 --> 00:02:43,040 nato pa odskočna v. 55 00:02:43,040 --> 00:02:46,169 >> Potem, ko ste nastavili odmor točka, lahko zaženete program. 56 00:02:46,169 --> 00:02:47,960 In če imate argumenti v ukazni vrstici, 57 00:02:47,960 --> 00:02:51,610 jih določite tukaj, ne takrat, ko tipkanjem GDB vaše ime programa. 58 00:02:51,610 --> 00:02:55,980 Vi določite vse ukazni vrstici Argumenti, ki jih ob r, ali tek, 59 00:02:55,980 --> 00:03:00,270 in nato argumenti glede ukazni vrstici morate znotraj vašega programa. 60 00:03:00,270 --> 00:03:03,510 Obstajajo številni drugi res pomembne in uporabne ukaze 61 00:03:03,510 --> 00:03:04,970 znotraj okolja BDP. 62 00:03:04,970 --> 00:03:07,540 Torej, mi dovolite, samo hitro iti čez nekatere od njih. 63 00:03:07,540 --> 00:03:11,320 >> Prvi je n, ki je okrajšava za dostavo, in lahko vnesete naslednji namesto n, 64 00:03:11,320 --> 00:03:12,304 tako bi delovalo. 65 00:03:12,304 --> 00:03:13,470 In to je samo bljižnica. 66 00:03:13,470 --> 00:03:17,540 In kot ste verjetno že gotten vajeni, da lahko tipa stvari 67 00:03:17,540 --> 00:03:20,520 krajši je na splošno boljša. 68 00:03:20,520 --> 00:03:24,100 In kaj bo naredil, je, da bomo korak naprej en blok kode. 69 00:03:24,100 --> 00:03:26,170 Torej bomo napredovati dokler klic funkcije. 70 00:03:26,170 --> 00:03:28,350 In nato namesto potapljanje v tej funkciji 71 00:03:28,350 --> 00:03:33,130 in gredo skozi vse, ki deluje koda, bo samo še funkcijo. 72 00:03:33,130 --> 00:03:34,400 >> Funkcija se bo imenoval. 73 00:03:34,400 --> 00:03:35,733 To bo storila ne glede na njeno delo. 74 00:03:35,733 --> 00:03:38,870 To bo vrnil vrednost funkcija, ki ga je imenoval. 75 00:03:38,870 --> 00:03:42,490 In potem boš prehod na koncept Naslednja vrstica te funkcije kliče. 76 00:03:42,490 --> 00:03:44,555 Če želite korak notranjost funkcije 77 00:03:44,555 --> 00:03:46,430 namesto samo ob to izvesti, še posebej, 78 00:03:46,430 --> 00:03:50,004 Če menite, da je problem morda ležijo znotraj te funkcije, 79 00:03:50,004 --> 00:03:52,670 lahko bi, seveda, določi odmor točko znotraj te funkcije. 80 00:03:52,670 --> 00:03:57,820 Ali pa, če ste že teče, lahko uporabite s korakom naprej eno vrstico kode. 81 00:03:57,820 --> 00:04:01,170 >> Torej bo to korak v in se potopite v funkcijah, 82 00:04:01,170 --> 00:04:04,750 namesto imajo samo izvedbo in nadaljuje naprej v funkciji 83 00:04:04,750 --> 00:04:07,380 da ste v za razhroščevanje. 84 00:04:07,380 --> 00:04:09,870 Če ste kdaj želeli vedeti vrednost spremenljivke, 85 00:04:09,870 --> 00:04:12,507 lahko vnesete p ali Print, in nato ime spremenljivke. 86 00:04:12,507 --> 00:04:15,090 In da se bo izpisal na vas, notranjost GDB okolja, 87 00:04:15,090 --> 00:04:19,110 ime spremenljivke, ki you-- oprostite me-- vrednost spremenljivke 88 00:04:19,110 --> 00:04:20,064 da ste poimenovali. 89 00:04:20,064 --> 00:04:23,230 Če želite vedeti, vrednote vsak lokalna spremenljivka dostopen od koder 90 00:04:23,230 --> 00:04:25,970 trenutno so v vašem Program, lahko vnesete info domačine. 91 00:04:25,970 --> 00:04:28,332 To je veliko hitreje kot tipkanje p in potem karkoli, 92 00:04:28,332 --> 00:04:30,540 kotacijo ven vse spremenljivke, da veste, obstajajo. 93 00:04:30,540 --> 00:04:34,370 Lahko vnesete info domačini, in to bo izpisal vse za vas. 94 00:04:34,370 --> 00:04:37,770 Naslednji je bt, ki je okrajšava za izsledil. 95 00:04:37,770 --> 00:04:41,680 Sedaj splošno predvsem v začetku CS50, 96 00:04:41,680 --> 00:04:44,450 ne boste res imeli priložnost za uporabo BT ali izsledil, 97 00:04:44,450 --> 00:04:47,860 ker niste ob funkcij da pokličete druge funkcije. 98 00:04:47,860 --> 00:04:50,450 >> Morda imate glavno poklicati funkcija, ampak to je verjetno to. 99 00:04:50,450 --> 00:04:53,199 Nimate to drugo funkcijo kliče drugo funkcijo, ki 100 00:04:53,199 --> 00:04:54,880 poziva drugo funkcijo, in tako naprej. 101 00:04:54,880 --> 00:04:57,550 Ampak kot vaši programi dobili več kompleks, in zlasti 102 00:04:57,550 --> 00:05:00,290 Ko začnete z delom z rekurzija, nazaj v sledovih 103 00:05:00,290 --> 00:05:05,150 more biti res koristen način, da bi vas nekako dobili nekaj kontekst, kjer 104 00:05:05,150 --> 00:05:06,460 Jaz sem v mojem programu. 105 00:05:06,460 --> 00:05:10,590 Tako pravijo, da ste napisal kodo, in veste, da je glavna zahteva funkcijo 106 00:05:10,590 --> 00:05:14,720 f, ki kliče funkcijo g, ki kliče funkcijo h. 107 00:05:14,720 --> 00:05:17,650 Torej imamo več plasti gnezditvenih dogaja. 108 00:05:17,650 --> 00:05:19,440 >> Če ste v notranjosti Vaše GDB okolje, 109 00:05:19,440 --> 00:05:21,640 in poznate svoje notranjosti H, ampak ste pozabili 110 00:05:21,640 --> 00:05:27,210 o tem, kaj vas imam, kjer vas are-- lahko vnesete bt, ali zadnji sled, 111 00:05:27,210 --> 00:05:32,370 in se bo izpisal h, g, f glavni, poleg nekaterih drugih informacij, ki 112 00:05:32,370 --> 00:05:35,984 vam daje namig, da je OK glavna imenovana f, f imenovanega g, g imenuje h 113 00:05:35,984 --> 00:05:37,900 in da je, kjer sem Trenutno sem v mojem programu. 114 00:05:37,900 --> 00:05:41,380 Torej je lahko zelo koristno, še posebej, ker Grobni-sti GDB 115 00:05:41,380 --> 00:05:45,667 postane malo veliko, da izvedeti, kje so stvari. 116 00:05:45,667 --> 00:05:48,500 Nazadnje, ko je vaš program storiti, ali ko ste končali ga debugging 117 00:05:48,500 --> 00:05:50,125 in želite odmakniti Iz GDB okolja, 118 00:05:50,125 --> 00:05:51,940 je koristno vedeti, kako priti iz nje. 119 00:05:51,940 --> 00:05:55,500 Lahko vnesete q, ali Končaj, da gremo ven. 120 00:05:55,500 --> 00:05:59,220 Zdaj pa, preden današnjem videu Sem pripravila program hroščat 121 00:05:59,220 --> 00:06:03,900 imenovano buggy1, ki sem zbrati iz datoteke znan kot buggy1.c. 122 00:06:03,900 --> 00:06:06,500 Kot bi lahko pričakovali, to Program je v resnici buggy. 123 00:06:06,500 --> 00:06:08,990 Gre kaj narobe ko sem poskusil in ga zaženite. 124 00:06:08,990 --> 00:06:13,014 Zdaj pa, žal, sem nehote izbrisal svoj buggy1.c datoteko 125 00:06:13,014 --> 00:06:15,930 tako da mi je, da ugotovimo, kaj je narobe s tem programom, 126 00:06:15,930 --> 00:06:18,770 Bom moral uporabiti GDB vrsta slepo, poskušam 127 00:06:18,770 --> 00:06:22,372 pluti skozi ta program, da ugotoviti, kaj je šlo narobe. 128 00:06:22,372 --> 00:06:24,580 Vendar s samo orodja smo že spoznali, 129 00:06:24,580 --> 00:06:27,700 smo lahko precej sliko ven točno to, kar je. 130 00:06:27,700 --> 00:06:30,740 Torej, kaj je nad glavo, CS50 IDE in si oglejte. 131 00:06:30,740 --> 00:06:33,155 OK, tako da smo tukaj, v mojem CS50 IDE okolje, 132 00:06:33,155 --> 00:06:35,697 in bom povečate malo tako da boste lahko videli malo več. 133 00:06:35,697 --> 00:06:38,530 V mojem terminalsko okno, če sem seznam vsebina mojega sedanjega direktorja 134 00:06:38,530 --> 00:06:41,250 z ls, bomo videli, da sem imajo nekaj izvornih datotek 135 00:06:41,250 --> 00:06:44,982 tod vključno prej razpravljali buggy1. 136 00:06:44,982 --> 00:06:46,940 Kaj točno se dogaja, ko Sem poskusil in teči buggy1. 137 00:06:46,940 --> 00:06:47,773 No kaj izvedeli. 138 00:06:47,773 --> 00:06:52,510 Sem tip dot poševnica, Otroški voziček in sem udaril Enter. 139 00:06:52,510 --> 00:06:53,670 >> Segmentacija napake. 140 00:06:53,670 --> 00:06:55,000 To ni dobro. 141 00:06:55,000 --> 00:06:57,180 Če se spomnite, A segmentacije krivda običajno 142 00:06:57,180 --> 00:07:01,540 se pojavi, ko imamo dostop do pomnilnika da si ne smemo dotakniti. 143 00:07:01,540 --> 00:07:03,820 Mi smo nekako dosegli izven meja 144 00:07:03,820 --> 00:07:05,995 o tem, kaj program je prevajalnik, nam je dano. 145 00:07:05,995 --> 00:07:08,310 In tako je že, da je namig, da v orodjarni 146 00:07:08,310 --> 00:07:10,660 kot smo začeli proces debugging. 147 00:07:10,660 --> 00:07:13,620 Nekaj ​​je šel malo narobe tukaj. 148 00:07:13,620 --> 00:07:15,935 >> Vse je v redu, zato začnimo up GDB okolje 149 00:07:15,935 --> 00:07:19,030 in videli, če lahko ugotovimo, kaj točno je problem. 150 00:07:19,030 --> 00:07:21,674 Grem zbistriti zaslon, in grem na vrsto GDB 151 00:07:21,674 --> 00:07:24,340 še enkrat, da vnesete GDB okolje, in ime programa 152 00:07:24,340 --> 00:07:27,450 da želim debug, buggy1. 153 00:07:27,450 --> 00:07:30,182 Smo dobili malo sporočilo, branje simboli iz buggy1, storjeno. 154 00:07:30,182 --> 00:07:32,390 Vse to pomeni, da je potegnil skupaj vse kode, 155 00:07:32,390 --> 00:07:35,570 in zdaj je bil naložen v GDB, in je pripravljena iti. 156 00:07:35,570 --> 00:07:37,140 >> Zdaj, kaj hočem narediti? 157 00:07:37,140 --> 00:07:39,130 Ali se spomnite, kaj je Prvi korak je značilno 158 00:07:39,130 --> 00:07:42,540 ko sem znotraj tega okolja? 159 00:07:42,540 --> 00:07:44,540 Upajmo, pri čemer si nastavite odmor točka, saj 160 00:07:44,540 --> 00:07:46,240 v dejstvu, da je tisto, kar želim storiti. 161 00:07:46,240 --> 00:07:47,990 Zdaj, jaz ne imeti Izvorna koda za ta 162 00:07:47,990 --> 00:07:50,948 pred mano, kar je verjetno ni tipičen primer uporabe, mimogrede. 163 00:07:50,948 --> 00:07:52,055 Ste verjetno bo. 164 00:07:52,055 --> 00:07:52,680 Torej, to je dobro. 165 00:07:52,680 --> 00:07:55,790 Vendar ob predpostavki, da ne, kaj je tista funkcija, ki veste 166 00:07:55,790 --> 00:07:58,880 obstaja v vsakem posameznem programu C? 167 00:07:58,880 --> 00:08:04,420 Ne glede na to, kako velik ali kako zapleteno je ta funkcija nedvomno obstaja. 168 00:08:04,420 --> 00:08:05,440 Main, kajne? 169 00:08:05,440 --> 00:08:08,870 >> Torej ni vse ostalo, smo lahko nastavite prelom točko na glavni. 170 00:08:08,870 --> 00:08:12,200 In spet, sem lahko samo tip prekinil glavni namesto b. 171 00:08:12,200 --> 00:08:14,650 In če ste radovedni, če vas kdaj tip ven dolgo ukaz 172 00:08:14,650 --> 00:08:16,800 in potem ugotovili, da vas vnesli napačno stvar, 173 00:08:16,800 --> 00:08:18,770 in želite, da se znebite vse, kot sem storil, 174 00:08:18,770 --> 00:08:22,029 si lahko prevzamejo nadzor nad U, ki bo izbrisati vse in vas pripeljem nazaj 175 00:08:22,029 --> 00:08:23,570 na začetku kazalca vrstic. 176 00:08:23,570 --> 00:08:26,569 Veliko hitreje kot samo držite izbrisati ali jo tepe kup krat 177 00:08:26,569 --> 00:08:27,080 konec. 178 00:08:27,080 --> 00:08:28,740 >> Torej bomo nastavili točko lomljenja na glavni. 179 00:08:28,740 --> 00:08:32,970 In kot vidite, se pravi, da smo jih nastavite točko lomljenja na datotečnem buggy1.c, 180 00:08:32,970 --> 00:08:36,330 in očitno prva vrstica o kodeksu glavna je linija sedem. 181 00:08:36,330 --> 00:08:38,080 Again, nimamo vir datoteke tukaj 182 00:08:38,080 --> 00:08:40,429 ampak bom Predvidevam, da je mi je povedal resnico. 183 00:08:40,429 --> 00:08:44,510 In potem, Poskušam in zaženite program, r. 184 00:08:44,510 --> 00:08:45,360 Zagon programa. 185 00:08:45,360 --> 00:08:48,160 Vse je v redu, tako da to sporočilo je malo skrivnosten. 186 00:08:48,160 --> 00:08:50,160 Ampak v bistvu, kaj je tu dogaja je, da je samo 187 00:08:50,160 --> 00:08:53,350 mi pravi, da sem udaril moj odmor točka, break točko številka 1. 188 00:08:53,350 --> 00:08:55,877 >> In potem, da je vrstica kode, takšno datoteko ali imenik ni. 189 00:08:55,877 --> 00:08:57,710 Edini razlog, da Jaz vidim to sporočilo 190 00:08:57,710 --> 00:09:00,800 je zato, ker sem nehote izbrisal svoj buggy.c datoteko. 191 00:09:00,800 --> 00:09:04,050 Če je obstajala moja buggy1.c datoteka v trenutnem imeniku, 192 00:09:04,050 --> 00:09:06,920 ta pravica linija tam bi dejansko povej mi, kaj je vrstica kode 193 00:09:06,920 --> 00:09:08,214 dobesedno bere. 194 00:09:08,214 --> 00:09:09,380 Na žalost sem jo izbrisali. 195 00:09:09,380 --> 00:09:14,790 Bomo morali nekako navigacijo skozi to malo bolj na slepo. 196 00:09:14,790 --> 00:09:17,330 >> OK, tako da vidimo, kaj hočem narediti tukaj? 197 00:09:17,330 --> 00:09:21,770 No, jaz bi rad vedel, kaj je lokalna spremenljivke, morda so mi na voljo. 198 00:09:21,770 --> 00:09:23,570 Sem začel svoj program. 199 00:09:23,570 --> 00:09:28,515 Poglejmo, kaj bi lahko bilo že inicializiran za nas. 200 00:09:28,515 --> 00:09:31,430 Sem tip Info domačini, ne domačini. 201 00:09:31,430 --> 00:09:33,960 Vse je v redu, tako da ne dajte mi tono informacij. 202 00:09:33,960 --> 00:09:37,600 Jaz bi poskusil in natisniti spremenljivke, ampak ne vem nobenega imena spremenljivk. 203 00:09:37,600 --> 00:09:39,930 Jaz bi poskusil back sled, vendar sem znotraj glavno, 204 00:09:39,930 --> 00:09:43,710 tako da vem, da še niso dosegli en klic funkcije zdaj. 205 00:09:43,710 --> 00:09:47,710 >> Torej izgleda so moje edine možnosti uporabiti n ali tako in začeti, da se potopite v. 206 00:09:47,710 --> 00:09:49,630 Jaz grem za uporabo n. 207 00:09:49,630 --> 00:09:51,180 Torej sem tip n. 208 00:09:51,180 --> 00:09:53,060 O moj bog, kaj se tukaj dogaja. 209 00:09:53,060 --> 00:09:56,260 Program prejel signale, SIGSEGV segmentacije krivda, 210 00:09:56,260 --> 00:09:57,880 nato pa cel kup stvari. 211 00:09:57,880 --> 00:09:58,880 Sem že preobremenjeni. 212 00:09:58,880 --> 00:10:00,980 No, tam je pravzaprav Veliko se tukaj naučil. 213 00:10:00,980 --> 00:10:02,520 Torej, kaj nam to pove? 214 00:10:02,520 --> 00:10:09,180 Kaj nam pove, je, da je ta program o tem, ampak še ni, SEG krivda. 215 00:10:09,180 --> 00:10:12,550 In predvsem, bom za povečavo še tu, 216 00:10:12,550 --> 00:10:18,980 gre za SEG napako o nekaj, kar se imenuje strcmp. 217 00:10:18,980 --> 00:10:22,705 >> Zdaj smo morda niso razpravljali ta funkcija v veliki meri. 218 00:10:22,705 --> 00:10:25,580 Ampak to is-- zato, ker ne bomo govoriti o vse funkcije, ki 219 00:10:25,580 --> 00:10:28,610 obstaja v standardu C library-- ampak oni so vse na voljo za vas, 220 00:10:28,610 --> 00:10:32,110 še posebej, če ste vzeli poglej reference.cs50.net. 221 00:10:32,110 --> 00:10:35,000 In strcmp je res močna Funkcija, ki obstaja znotraj 222 00:10:35,000 --> 00:10:38,070 od string.h glavi datoteka, ki je glava 223 00:10:38,070 --> 00:10:41,970 datoteka, ki je posvečena funkcij da je delo z in manipulirati strune. 224 00:10:41,970 --> 00:10:49,830 >> In predvsem, kaj strcmp pa je primerja vrednosti dveh nizov. 225 00:10:49,830 --> 00:10:54,160 Torej sem približno segmentacije napako na poziv k strcmp zdi. 226 00:10:54,160 --> 00:10:58,530 Sem udaril n, in v bistvu sem dobil sporočilo, Program zaključi s signalom SIGSEGV 227 00:10:58,530 --> 00:11:01,370 segmentacije krivda. Torej zdaj Imam dejansko SEG očitati, 228 00:11:01,370 --> 00:11:06,479 in moj program ima precej precej učinkovito obupal. 229 00:11:06,479 --> 00:11:07,770 To je konec programa. 230 00:11:07,770 --> 00:11:10,370 Je pokvaril, je strmoglavilo. 231 00:11:10,370 --> 00:11:14,740 Torej ni bilo veliko, vendar sem dejansko naredil učijo zelo malo 232 00:11:14,740 --> 00:11:16,747 od tega malo izkušenj. 233 00:11:16,747 --> 00:11:17,580 Kaj sem se naučil? 234 00:11:17,580 --> 00:11:22,020 No, moj Program zruši precej takoj. 235 00:11:22,020 --> 00:11:26,300 Moj program zruši na poziv k strcmp, vendar sem 236 00:11:26,300 --> 00:11:30,560 nimajo nobenih lokalnih spremenljivk v moji Program v času, ko se raztrešči. 237 00:11:30,560 --> 00:11:37,320 Torej, kaj je niz, ali strune, Lahko bi morda primerjavo. 238 00:11:37,320 --> 00:11:42,140 Če nimam vsak lokalni spremenljivke, boste morda 239 00:11:42,140 --> 00:11:45,520 Domnevamo, da sem have-- obstaja morda je Globalna spremenljivka, ki bi lahko bilo res. 240 00:11:45,520 --> 00:11:47,670 >> Vendar na splošno, se zdi kot sem primerjavo 241 00:11:47,670 --> 00:11:52,070 na nekaj, kar ne obstaja. 242 00:11:52,070 --> 00:11:54,130 Torej, kaj je raziskati da malo naprej. 243 00:11:54,130 --> 00:11:55,120 Torej bom zbistriti zaslon. 244 00:11:55,120 --> 00:11:57,536 Bom nehal ven iz GDB okolje za sekundo. 245 00:11:57,536 --> 00:12:01,300 In sem razmišljal, OK, tako da je Ni lokalne spremenljivke v mojem programu. 246 00:12:01,300 --> 00:12:06,444 Zanima me, če morda sem moral opraviti v nizu, kot argument ukazne vrstice. 247 00:12:06,444 --> 00:12:07,610 Torej, kaj je samo preizkusiti to. 248 00:12:07,610 --> 00:12:09,020 Prej nisem storil tega. 249 00:12:09,020 --> 00:12:14,244 >> Poglejmo, če morda, če sem teči ta program z argumentom ukazne vrstice deluje. 250 00:12:14,244 --> 00:12:16,140 Huh, ne segmentacija napaka tam. 251 00:12:16,140 --> 00:12:17,870 To mi je pravkar povedal, da sem pogruntal. 252 00:12:17,870 --> 00:12:19,170 Tako da morda to je fix tukaj. 253 00:12:19,170 --> 00:12:27,560 In res, če sem šel nazaj in poglej dejanska izvorna koda za buggy1.c, 254 00:12:27,560 --> 00:12:31,180 se zdi, da tisto, kar delam, je Delam klic strcmp brez 255 00:12:31,180 --> 00:12:34,010 preverjanje, ali v resnici argv [1] obstaja. 256 00:12:34,010 --> 00:12:36,730 To je dejansko Izvorna koda za buggy1.c. 257 00:12:36,730 --> 00:12:38,855 Torej, kaj sem res potrebujejo, da storite tukaj popraviti svoj program, 258 00:12:38,855 --> 00:12:40,835 ob predpostavki, da imam vložiti pred mano, je 259 00:12:40,835 --> 00:12:44,740 da samo dodati preverite, zagotoviti, da argc je enak 2. 260 00:12:44,740 --> 00:12:47,780 Torej ta primer, še enkrat, kot sem rekel, je malo izmišljeno, kajne? 261 00:12:47,780 --> 00:12:49,840 Ste na splošno ne bo pomotoma izbrisali izvorno kodo 262 00:12:49,840 --> 00:12:51,820 in potem poskusiti in debug program. 263 00:12:51,820 --> 00:12:53,120 Ampak upam, da je dal Ste ilustracija 264 00:12:53,120 --> 00:12:55,120 od vrst stvari, ki si lahko razmišljal o 265 00:12:55,120 --> 00:12:56,610 kot ste odpravljanje napak v programu. 266 00:12:56,610 --> 00:12:58,760 >> Kaj je stanje tukaj? 267 00:12:58,760 --> 00:13:00,510 Kaj spremenljivke storiti I imajo dostop do mene? 268 00:13:00,510 --> 00:13:03,600 Kje točno je moj program, treskav, na kakšni liniji, 269 00:13:03,600 --> 00:13:05,240 o tem, kaj klic na kakšno funkcijo? 270 00:13:05,240 --> 00:13:06,952 Kakšno indicev, ne da mi daje? 271 00:13:06,952 --> 00:13:08,910 In to je točno vrsta miselnosti, ki vas 272 00:13:08,910 --> 00:13:12,820 naj se dobili v, ko ste razmišljanje o razhroščevanje svojih programov. 273 00:13:12,820 --> 00:13:13,820 >> Sem Doug Lloyd. 274 00:13:13,820 --> 00:13:16,140 To je CS50. 275 00:13:16,140 --> 00:15:08,642