1 00:00:00,000 --> 00:00:05,640 2 00:00:05,640 --> 00:00:06,830 >> DOUG LLOYD: eskuineko GDB guztiak. 3 00:00:06,830 --> 00:00:08,480 Zer da zehazki? 4 00:00:08,480 --> 00:00:11,310 Beraz, GDB, horrek nabarmentzen GNU Debugger du, 5 00:00:11,310 --> 00:00:15,040 benetan awesome tresna bat da ezin dugula erabili lagunduko digu gure programak arazteko, 6 00:00:15,040 --> 00:00:18,210 edo jakin non gauzak dira gaizki joan gure programetan. 7 00:00:18,210 --> 00:00:22,590 GDB da amazingly indartsua, baina Irteera eta elkarrekintza berarekin 8 00:00:22,590 --> 00:00:23,830 Pixka bat críptica izan daiteke. 9 00:00:23,830 --> 00:00:28,210 Ohi da komando lerroko tresna bat, eta mezu asko bota daiteke at. 10 00:00:28,210 --> 00:00:31,144 Eta berak gogor egin ahal izango du analizatu zehazki zer ari den gertatzen. 11 00:00:31,144 --> 00:00:33,560 Zorionez, hartu dugu urrats Arazo hau konpondu ahal izateko 12 00:00:33,560 --> 00:00:36,281 CS50 bidez lan egiten duzun bezala. 13 00:00:36,281 --> 00:00:39,030 Ez bazaude grafikoa erabiliz gero araztailea, eta horrek nire lankide Dan 14 00:00:39,030 --> 00:00:41,570 Armandarse nahiko ongi hitz egin Pixka bat bideo batean dagoela 15 00:00:41,570 --> 00:00:44,740 hemen baino gehiago izan behar du oraintxe, agian behar duzu 16 00:00:44,740 --> 00:00:48,270 Komando-lerro hauek erabili Tresna GDB batekin lan. 17 00:00:48,270 --> 00:00:51,250 Zu CS50 batean lan egiten badu IDE, ez duzu behar, hori egin ahal izateko. 18 00:00:51,250 --> 00:00:53,550 Baina ez bazaude CS50 IDE lanean, 19 00:00:53,550 --> 00:00:55,750 beharbada bertsio bat erabiliz CS50 Appliance, 20 00:00:55,750 --> 00:00:58,860 edo beste Linux operatiboak GDB sistema instalatuta, 21 00:00:58,860 --> 00:01:00,980 erabili behar izango duzu komando lerroko tresna horiek. 22 00:01:00,980 --> 00:01:02,860 >> Eta geroztik dituzun ez da egin behar, da 23 00:01:02,860 --> 00:01:06,280 erabilgarria besterik ulertzen nola GDB komando lerrotik lan egiten du. 24 00:01:06,280 --> 00:01:09,650 Baina, berriro ere, ez bazaude CS50 IDE erabiliz, zuk 25 00:01:09,650 --> 00:01:15,400 the araztailea grafikoa erabili ahal hori IDE barneratzen. 26 00:01:15,400 --> 00:01:18,750 Beraz, gauza batera joan lortzeko GDB, arazketa hasteko 27 00:01:18,750 --> 00:01:21,220 jakin baten prozesua programa, guztiak egin behar duzun 28 00:01:21,220 --> 00:01:23,810 idazten da GDB eta jarraian programaren izenarekin. 29 00:01:23,810 --> 00:01:28,620 Beraz, adibidez, zure programa bada kaixo, hau idatzi behar duzu GDB kaixo. 30 00:01:28,620 --> 00:01:31,210 >> Noiz egin duzu, bazoazela tira GDB ingurumena. 31 00:01:31,210 --> 00:01:33,800 Zure gonbita aldatu egingo da, eta ordez izatearen zer da normalean 32 00:01:33,800 --> 00:01:35,841 da gauzak idazten duzun eko komando lerroan ls du, 33 00:01:35,841 --> 00:01:38,115 cd zure tipikoa guztia Linux komandoak, zure gonbita 34 00:01:38,115 --> 00:01:42,200 egingo, ziurrenik, zerbait aldatu parentesi bezala GDB parentesi. 35 00:01:42,200 --> 00:01:46,630 Hori da zure GDB gonbita berria da, izan ere, Oraindik GDB ingurumena barruan. 36 00:01:46,630 --> 00:01:49,830 Behin ingurumena horren barruan, Han bi komando garrantzitsu 37 00:01:49,830 --> 00:01:52,290 baliteke zuk erabiltzen dituzten ondoko ordenean. 38 00:01:52,290 --> 00:01:55,200 >> Lehena b da, eta horrek da break labur. 39 00:01:55,200 --> 00:01:58,690 Eta zuk idazten b ondoren, normalean duzu idatzi izen funtzio baten, 40 00:01:58,690 --> 00:02:01,040 edo jakin gertatuko baduzu zer lerro kopurua inguruan 41 00:02:01,040 --> 00:02:04,100 Zure programa hasita apur bat arraro portatzen, 42 00:02:04,100 --> 00:02:06,370 lerro bat idatzi dezakezu kopurua ez baita. 43 00:02:06,370 --> 00:02:09,660 Zer b, edo break, ez du da zure programa aukera ematen du 44 00:02:09,660 --> 00:02:13,270 lasterka hasteko puntu jakin bat arte, hots, funtzio baten izena 45 00:02:13,270 --> 00:02:15,880 Zehaztu duzun edo lerroa Zuk zehaztutako kopurua. 46 00:02:15,880 --> 00:02:18,590 >> Eta une horretan, hura exekuzioa izoztu egingo. 47 00:02:18,590 --> 00:02:21,670 Hau gauza benetan ona da, zeren behin exekuzioa izan izoztuta, 48 00:02:21,670 --> 00:02:25,214 has daiteke oso astiro Zure programaren bidez urratsa. 49 00:02:25,214 --> 00:02:28,130 Normalean, korrika dituzun izan bada Zure programak, nahiko laburrak dira. 50 00:02:28,130 --> 00:02:31,250 Normalean, zuk idatzi dot barra edozein dela zure programaren izena da, sakatu Sartu, 51 00:02:31,250 --> 00:02:33,470 eta keinu aurretik, zure programa dagoeneko amaitu da. 52 00:02:33,470 --> 00:02:36,620 Ez da benetan, denbora saiatu asko bertan zer oker joan. 53 00:02:36,620 --> 00:02:40,920 Beraz, benetan gauzak moteldu ahal izatea da behera b haustura puntu bat emanez, 54 00:02:40,920 --> 00:02:43,040 eta orduan ere zapaltzeko. 55 00:02:43,040 --> 00:02:46,169 >> Ondoren, behin zure break ezarri duzun Puntu, programa exekutatu ahal izango duzu. 56 00:02:46,169 --> 00:02:47,960 Eta edozein zalantza izanez gero komando lerroko argumentuak, 57 00:02:47,960 --> 00:02:51,610 horiek hemen zehazten baduzu, ez denean GDB idatzi zure programaren izena. 58 00:02:51,610 --> 00:02:55,980 Komando-lerroan guztia zehaztu behar duzu r, edo run hartuz argudioak, 59 00:02:55,980 --> 00:03:00,270 eta ondoren, edozein dela komando lerroko argumentuak zure programaren barruan behar duzu. 60 00:03:00,270 --> 00:03:03,510 Badira beste batzuk agertzen dira, benetan commands garrantzitsua eta erabilgarria 61 00:03:03,510 --> 00:03:04,970 BPG ingurunearen barruan. 62 00:03:04,970 --> 00:03:07,540 Hargatik besterik azkar go gehiagoko horietako batzuk. 63 00:03:07,540 --> 00:03:11,320 >> Lehena n, hau da, hurrengo laburra da, eta n hurrengo ordez idatzi dezakezu, 64 00:03:11,320 --> 00:03:12,304 bai lan litzateke. 65 00:03:12,304 --> 00:03:13,470 Eta besterik takigrafia da. 66 00:03:13,470 --> 00:03:17,540 Eta ziurrenik duzun dagoeneko ahaztuak gisa den, gauzak idatzi ahal izateaz erabili 67 00:03:17,540 --> 00:03:20,520 laburragoa da, oro har, hobeto. 68 00:03:20,520 --> 00:03:24,100 Eta zer egingo dela ikusiko aurrerapauso bat kode-bloke. 69 00:03:24,100 --> 00:03:26,170 Beraz, aurrera egingo mugitu funtzio-dei bat egin arte. 70 00:03:26,170 --> 00:03:28,350 Eta gero ordez Funtzio hori murgiltzen 71 00:03:28,350 --> 00:03:33,130 eta funtzio guztiak igaro kodea, besterik ez dute egingo da funtzioa. 72 00:03:33,130 --> 00:03:34,400 >> Funtzio deituko da. 73 00:03:34,400 --> 00:03:35,733 Bere lana da edozein izanda ere egin ahal izango da. 74 00:03:35,733 --> 00:03:38,870 Balio bat itzuliko da funtzioa deitzen da. 75 00:03:38,870 --> 00:03:42,490 Eta, ondoren, mugitu dituzu izateko hurrengo zenbakira deituz funtzioa duten lerroa. 76 00:03:42,490 --> 00:03:44,555 Zapaldu nahi baduzu funtzioaren barruan, 77 00:03:44,555 --> 00:03:46,430 besterik ordez izatearen , exekutatu bereziki 78 00:03:46,430 --> 00:03:50,004 uste arazoa dela baduzu funtzio hori barruan gezurra liteke, 79 00:03:50,004 --> 00:03:52,670 zitekeen, noski, ezartzen duzu break bat seinalatu funtzio hori barruan. 80 00:03:52,670 --> 00:03:57,820 Edo dagoeneko exekutatzen ari bazara, ezin duzu s erabili Aurrera kode-lerro bat zapalduta. 81 00:03:57,820 --> 00:04:01,170 >> Beraz, hau urratsa egingo eta funtzio sartu dive, 82 00:04:01,170 --> 00:04:04,750 ordez besterik ez dute exekutatu eta etengabeko funtzioa ere 83 00:04:04,750 --> 00:04:07,380 Oraindik ez duzula arazteko ere. 84 00:04:07,380 --> 00:04:09,870 Al duzu inoiz nahi bada jakin aldagai baten balioa, 85 00:04:09,870 --> 00:04:12,507 idatz dezakezu p, edo inprimatzeko, eta, ondoren, aldagai izena. 86 00:04:12,507 --> 00:04:15,090 Eta hori izango duzu inprimatzeko, GDB ingurunearen barruan, 87 00:04:15,090 --> 00:04:19,110 aldagaiaren izena, hori zu desenkusatzeko Niretzat aldagaiaren balioa 88 00:04:19,110 --> 00:04:20,064 Izendatzen duzun. 89 00:04:20,064 --> 00:04:23,230 Behin balioak jakin nahi baduzu nondik tokiko aldagai eskuragarria 90 00:04:23,230 --> 00:04:25,970 zaude zure programa, info bertakoek idatz dezakezu. 91 00:04:25,970 --> 00:04:28,332 Da asko baino azkarrago p idazten eta gero, edozein dela, 92 00:04:28,332 --> 00:04:30,540 egindako zerrendako guztiak aldagai hori existitzen ezagutzen laguntzeko. 93 00:04:30,540 --> 00:04:34,370 Info bertakoek idatzi ahal izango duzu, eta horrekin inprimatu egingo dena zuretzat. 94 00:04:34,370 --> 00:04:37,770 Hurrengo sortu da bt, hau da, Itzuli Trace labur. 95 00:04:37,770 --> 00:04:41,680 Orain, oro har, bereziki CS50 hasieran, 96 00:04:41,680 --> 00:04:44,450 Ezin izango duzu benetan ocasión bt, edo atzera traza erabili, 97 00:04:44,450 --> 00:04:47,860 delako ari ez funtzio beharrik duten beste funtzio deitu. 98 00:04:47,860 --> 00:04:50,450 >> Baliteke deiaren nagusi bat behar duzu funtzioa, baina hori da seguru. 99 00:04:50,450 --> 00:04:53,199 Ez beste funtzio hori daukazu funtzio bat deituz, bertan 100 00:04:53,199 --> 00:04:54,880 funtzioa beste deiak, eta abar. 101 00:04:54,880 --> 00:04:57,550 Baina zure programak lortu bezain gehiago konplexua da, eta, bereziki, 102 00:04:57,550 --> 00:05:00,290 denean lanean hasten zarenean errekurtsio batera, atzera arrastorik 103 00:05:00,290 --> 00:05:05,150 dezazun modu oso erabilgarria izan daiteke motatako non testuinguru batzuk lortzeko 104 00:05:05,150 --> 00:05:06,460 Ni nire programan dut. 105 00:05:06,460 --> 00:05:10,590 Beraz, esan idatzitakoa zure kodea, eta Dakizuenez nagusia funtzio bat deitzen 106 00:05:10,590 --> 00:05:14,720 f, horrek funtzio bat deitzen g, zein funtzio h deitzen. 107 00:05:14,720 --> 00:05:17,650 Beraz, zenbait geruza izan dugu habia da hemen. 108 00:05:17,650 --> 00:05:19,440 >> Oraindik barrutik bada Zure GDB ingurumena, 109 00:05:19,440 --> 00:05:21,640 eta zure barruan badakizu h, baina ahaztu duzu 110 00:05:21,640 --> 00:05:27,210 zer lortu duzu non nahi buruz are-- bt, edo atzera arrastorik idatzi dezakezu, 111 00:05:27,210 --> 00:05:32,370 eta egingo h, g, inprimatu, f nagusia, beste informazio batzuk, ondoan bertan 112 00:05:32,370 --> 00:05:35,984 arrastoren bat ematen dizu, OK nagusia f deitzen, g izeneko f, g h deitzen, 113 00:05:35,984 --> 00:05:37,900 eta hori da, non I Une nire programan naiz. 114 00:05:37,900 --> 00:05:41,380 Beraz, benetan baliagarria izan daiteke, batez ere, GDB críptica-tza gisa 115 00:05:41,380 --> 00:05:45,667 pixka bat jasanezinak bihurtzen da, jakin zehazki non gauzak dira. 116 00:05:45,667 --> 00:05:48,500 Azkenik, zure programa egiten da, edo amaitzen duzunean arazteko 117 00:05:48,500 --> 00:05:50,125 eta kanpoan zapaldu nahi duzu GDB ingurumena, 118 00:05:50,125 --> 00:05:51,940 nola atera da ezagutzen laguntzen du. 119 00:05:51,940 --> 00:05:55,500 Q idatz dezakezu, edo Irten, ateratzeko. 120 00:05:55,500 --> 00:05:59,220 Orain, gaur egungo bideo aurretik Buggy programa bat prestatu nuen 121 00:05:59,220 --> 00:06:03,900 buggy1 izenekoa, I konpilatu buggy1.c bezala ezagutzen fitxategi batetik. 122 00:06:03,900 --> 00:06:06,500 Ondoren espero zitekeen bezala, honetan programa, hain zuzen buggy da. 123 00:06:06,500 --> 00:06:08,990 Zerbait oker denean saiatzen naiz eta exekutatu. 124 00:06:08,990 --> 00:06:13,014 Orain, zoritxarrez, I oharkabean ezabatu da nire buggy1.c fitxategia, 125 00:06:13,014 --> 00:06:15,930 beraz, ordena me irudikatu nahi zer gaizki programa honekin joan, 126 00:06:15,930 --> 00:06:18,770 Erabili behar noa GDB motatako blindly, dudarik gabe 127 00:06:18,770 --> 00:06:22,372 programa honen bidez nabigatu daki zehazki zer oker joan. 128 00:06:22,372 --> 00:06:24,580 Baina besterik tresna erabiliz dagoeneko dugu buruz ikasi, 129 00:06:24,580 --> 00:06:27,700 Nahiko askoz irudikatu dugu out zehazki zer den. 130 00:06:27,700 --> 00:06:30,740 Hargatik buru izateko CS50 IDE eta begirada bat. 131 00:06:30,740 --> 00:06:33,155 Ados, beraz, hemen gaude, nire CS50 IDE ingurumena, 132 00:06:33,155 --> 00:06:35,697 eta egingo du pixka bat handiago dut beraz, apur bat gehiago ikusi ahal izango duzu. 133 00:06:35,697 --> 00:06:38,530 Nire terminal leihoa, I zerrendatu bada Nire egungo zuzendari edukina 134 00:06:38,530 --> 00:06:41,250 ls batera, ikusiko dugu dut Iturburu fitxategiak pare bat 135 00:06:41,250 --> 00:06:44,982 Hemen, besteak beste, Lehen aipatu dugun buggy1. 136 00:06:44,982 --> 00:06:46,940 Zer zehazki noiz aurrera doa Saiatu nintzen eta korrika buggy1. 137 00:06:46,940 --> 00:06:47,773 Beno dezagun jakin. 138 00:06:47,773 --> 00:06:52,510 Idazten dudanean dot barra, buggy, eta I sakatu Sartu. 139 00:06:52,510 --> 00:06:53,670 >> Segmentazio hutsegite. 140 00:06:53,670 --> 00:06:55,000 Hori ez da ona. 141 00:06:55,000 --> 00:06:57,180 Gogoratzen baduzu, a segmentazio errua normalean 142 00:06:57,180 --> 00:07:01,540 denean memoria sartzeko gertatzen ari garela ezin dute ukitu. 143 00:07:01,540 --> 00:07:03,820 Nik nolabait iritsi gara mugetatik kanpo 144 00:07:03,820 --> 00:07:05,995 ren programan sartu da, konpiladorea, eman digu. 145 00:07:05,995 --> 00:07:08,310 Eta beraz, dagoeneko hori bat den tresna-koadroko mantentzeko ideiarik 146 00:07:08,310 --> 00:07:10,660 arazketa prozesua hasiko dugu. 147 00:07:10,660 --> 00:07:13,620 Zerbait gaizki asi apur bat hemen. 148 00:07:13,620 --> 00:07:15,935 >> Ondo da, beraz, has gaitezen GDB ingurumena 149 00:07:15,935 --> 00:07:19,030 eta ikusi dugu irudikatu ahal bada zer da arazoa. 150 00:07:19,030 --> 00:07:21,674 Nire pantaila garbitzeko noa, eta naiz GDB joan idatzi dut 151 00:07:21,674 --> 00:07:24,340 Berriro, GDB ingurumena sartzeko, eta programaren izenarekin 152 00:07:24,340 --> 00:07:27,450 , arazteko buggy1 nahi dut. 153 00:07:27,450 --> 00:07:30,182 Mezuaren apur bat lortuko dugu, irakurtzen buggy1 ikurrak, egin. 154 00:07:30,182 --> 00:07:32,390 Guztiak esan nahi duen Bota kode osoa elkarrekin, 155 00:07:32,390 --> 00:07:35,570 eta orain izan da kargatu GDB, eta prest joan da. 156 00:07:35,570 --> 00:07:37,140 >> Orain, zer egin nahi dut? 157 00:07:37,140 --> 00:07:39,130 Ez zer gogoratzen duzu Lehen urratsa normalean da 158 00:07:39,130 --> 00:07:42,540 Naiz ingurune horren barruan ondoren? 159 00:07:42,540 --> 00:07:44,540 Zorionez, esan Ezarri duzu break puntu bat, izan ere, 160 00:07:44,540 --> 00:07:46,240 Izan ere, hori da, zer egin nahi dut. 161 00:07:46,240 --> 00:07:47,990 Orain, ez daukat du iturburu hau kodea 162 00:07:47,990 --> 00:07:50,948 nire aurrean, hau da, seguruenik Ez du erabilera kasu tipikoa, bide batez. 163 00:07:50,948 --> 00:07:52,055 Ziurrenik. 164 00:07:52,055 --> 00:07:52,680 Beraz, ona da. 165 00:07:52,680 --> 00:07:55,790 Baina suposatuz ez duzu, zer da badakiela du inork funtzioa 166 00:07:55,790 --> 00:07:58,880 C single programa guztietan badago? 167 00:07:58,880 --> 00:08:04,420 Ez dio axola nola handi edo konplikatuak den, funtzio honek, zalantzarik existitzen. 168 00:08:04,420 --> 00:08:05,440 Main, ezta? 169 00:08:05,440 --> 00:08:08,870 >> Beraz, beste guztiak izan ezean, ezin dugu break nagusia puntu bat ezarri. 170 00:08:08,870 --> 00:08:12,200 Eta berriro ere, besterik gabe ezin idazten dudanean apurtu nagusia, b ordez. 171 00:08:12,200 --> 00:08:14,650 Eta ari zaren bitxia bada, baduzu inoiz idatzi komando luzez 172 00:08:14,650 --> 00:08:16,800 eta orduan konturatzen zara Gauza oker idatzi, 173 00:08:16,800 --> 00:08:18,770 eta kendu nahi duzula besterik ez nuen guztia, 174 00:08:18,770 --> 00:08:22,029 Kontrol U hartu ahal izango duzu, egingo den Guztia ezabatu eta atzera ekarri 175 00:08:22,029 --> 00:08:23,570 Kurtsorea lerro hasieran izateko. 176 00:08:23,570 --> 00:08:26,569 Asko bakarrik eutsi behera baino azkarrago ezabatu edo kolpeak sorta aldiz 177 00:08:26,569 --> 00:08:27,080 baino gehiago. 178 00:08:27,080 --> 00:08:28,740 >> Beraz, break puntu bat ezarri dugu, aldi berean. 179 00:08:28,740 --> 00:08:32,970 Eta ikusiko duzunez, dugu esaten du break puntu bat ezarri dute fitxategi buggy1.c at, 180 00:08:32,970 --> 00:08:36,330 eta, antza denez, lehen lerroan nagusien kodea zazpi linea da. 181 00:08:36,330 --> 00:08:38,080 Berriz ere, ez dugu sorburu fitxategia hemen, 182 00:08:38,080 --> 00:08:40,429 baina bere gain hartzen dut, hori da Niri egia kontatzea. 183 00:08:40,429 --> 00:08:44,510 Eta gero, besterik saiatzen ari naiz eta programa abiatzean, r. 184 00:08:44,510 --> 00:08:45,360 Programa aurrera. 185 00:08:45,360 --> 00:08:48,160 Ondo da, beraz, mezu hau apur bat críptica da. 186 00:08:48,160 --> 00:08:50,160 Baina, batez ere, zer da hemen gertatzen da, besterik ez da 187 00:08:50,160 --> 00:08:53,350 me kontatzea hit dut nire break Puntu, break puntu kopurua 1. 188 00:08:53,350 --> 00:08:55,877 >> Eta gero, kode lerro bat, hala nola, fitxategia edo direktorioa ez. 189 00:08:55,877 --> 00:08:57,710 Arrazoi bakarra dela Mezu hori ikusten dut 190 00:08:57,710 --> 00:09:00,800 da I oharkabean delako Nire buggy.c fitxategia ezabatu. 191 00:09:00,800 --> 00:09:04,050 Nire buggy1.c fitxategia existitu bada uneko direktorioan, 192 00:09:04,050 --> 00:09:06,920 lerro ez litzateke benetan eskubide hori esaidazu zer kode lerro 193 00:09:06,920 --> 00:09:08,214 literalki irakurtzen. 194 00:09:08,214 --> 00:09:09,380 Zoritxarrez, ezabatu dut. 195 00:09:09,380 --> 00:09:14,790 Mota nabigatu dute goaz Hau apur bat gehiago blindly bidez. 196 00:09:14,790 --> 00:09:17,330 >> Ados, beraz, ikus dezagun, zer Zer ikusi, zer egin nahi dut? 197 00:09:17,330 --> 00:09:21,770 Beno, zer tokiko jakin nahi nuke aldagai agian niretzat eskuragarri. 198 00:09:21,770 --> 00:09:23,570 Nire programa hasi naiz. 199 00:09:23,570 --> 00:09:28,515 Zer izan daitekeen ikus-en Dagoeneko guretzat hasieratu. 200 00:09:28,515 --> 00:09:31,430 Idazten dudanean Info bertakoek, bertakoek ez. 201 00:09:31,430 --> 00:09:33,960 Ondo da, beraz, ez du eman zidan informazio tona bat. 202 00:09:33,960 --> 00:09:37,600 Saiatu dira, eta inprimatzeko, aldagai bat izan dut, baina ez dakit izenik aldakorra. 203 00:09:37,600 --> 00:09:39,930 Atzera arrastorik saiatu izan dut, baina nago nagusiaren barruan, 204 00:09:39,930 --> 00:09:43,710 beraz, ezagutzen dut ez dut egin Funtzio beste dei oraintxe. 205 00:09:43,710 --> 00:09:47,710 >> Beraz, itxura nire aukera bakarra dira n edo hain erabiltzeko eta murgiltze hasteko. 206 00:09:47,710 --> 00:09:49,630 N erabili noa. 207 00:09:49,630 --> 00:09:51,180 Beraz idazten dudanean n. 208 00:09:51,180 --> 00:09:53,060 Oh my gosh, zer gertatzen da hemen. 209 00:09:53,060 --> 00:09:56,260 Programa jasotako seinaleak, SIGSEGV segmentazio errua, 210 00:09:56,260 --> 00:09:57,880 eta gero gauzak sorta oso bat. 211 00:09:57,880 --> 00:09:58,880 Larritu naiz jada. 212 00:09:58,880 --> 00:10:00,980 Beno, ez da benetan bat asko hemen ikasi behar. 213 00:10:00,980 --> 00:10:02,520 Beraz, zer esango digu? 214 00:10:02,520 --> 00:10:09,180 Zer egiten digun da, programa hau da buruz, baina ez du oraindik, seg errua. 215 00:10:09,180 --> 00:10:12,550 Eta, batez ere, noa are gehiago hemen gerturatzeko, 216 00:10:12,550 --> 00:10:18,980 buruz seg errua buruz strcmp izeneko zerbait. 217 00:10:18,980 --> 00:10:22,705 >> Orain, agian, ez dute eztabaidatu dugu Funtzio honek zabala. 218 00:10:22,705 --> 00:10:25,580 Baina ari gara, ez delako is-- da funtzio guztietan buruz hitz egin behar da, 219 00:10:25,580 --> 00:10:28,610 C estandarra existitzen liburutegia baina guztiak zure eskura daudela, 220 00:10:28,610 --> 00:10:32,110 bat hartu bereziki baduzu reference.cs50.net begiratzeko. 221 00:10:32,110 --> 00:10:35,000 Eta strcmp da benetan indartsu bat Funtzio badagoela barruan 222 00:10:35,000 --> 00:10:38,070 the String.h goiburua fitxategia, goiburua da 223 00:10:38,070 --> 00:10:41,970 hori funtzio eskainitako fitxategia lan egiten duten eta manipulatzeko kateak. 224 00:10:41,970 --> 00:10:49,830 >> Eta, batez ere, zer strcmp egiten da bi kateak balioak alderatzen ditu. 225 00:10:49,830 --> 00:10:54,160 Beraz, errua Segmentaziuo behar banintz Dei bat egiten ari da, dirudienez strcmp izateko. 226 00:10:54,160 --> 00:10:58,530 Hit I n, eta hain zuzen ere mezua jasoko dut, programa seinalea SIGSEGV amaitu 227 00:10:58,530 --> 00:11:01,370 segmentazio errua. Beraz, gaur Benetan seg failatuta dut, 228 00:11:01,370 --> 00:11:06,479 eta nire programa nahiko askoz eraginkortasunez amore eman. 229 00:11:06,479 --> 00:11:07,770 Honek programaren amaiera izango da. 230 00:11:07,770 --> 00:11:10,370 Behera hautsi, huts egin. 231 00:11:10,370 --> 00:11:14,740 Beraz, ez zen asko, baina ez dut Benetan egin nahiko pixka bat ikasi 232 00:11:14,740 --> 00:11:16,747 esperientzia gutxi honetatik. 233 00:11:16,747 --> 00:11:17,580 Zer ikasi dut? 234 00:11:17,580 --> 00:11:22,020 Beno, nire programa izorratzen Nahiko askoz berehala. 235 00:11:22,020 --> 00:11:26,300 My programa izorratzen on bat deitzeko strcmp, baina ez dut 236 00:11:26,300 --> 00:11:30,560 ez edozein aldagai lokalak izan ere, nire garai hondatzen duten programa. 237 00:11:30,560 --> 00:11:37,320 Beraz, zer katea, edo kateak, Izan ziurrenik alderatzea izan dut. 238 00:11:37,320 --> 00:11:42,140 Ez badut dute lokalik aldagaiak, baliteke 239 00:11:42,140 --> 00:11:45,520 surmise ez have-- dudala agian da aldagai global, egia izan daiteke. 240 00:11:45,520 --> 00:11:47,670 >> Baina, oro har, badirudi atsegin dut alderatuz 241 00:11:47,670 --> 00:11:52,070 Existitzen ez den zerbait. 242 00:11:52,070 --> 00:11:54,130 Hargatik ikertu apur bat gehiago dela. 243 00:11:54,130 --> 00:11:55,120 Beraz, ez dut nire pantaila garbitzeko joan. 244 00:11:55,120 --> 00:11:57,536 To kanpora irten noa GDB bigarren bat ingurumena. 245 00:11:57,536 --> 00:12:01,300 Eta, pentsatzen Ados nago, beraz, ez da no tokiko nire programan aldagai. 246 00:12:01,300 --> 00:12:06,444 Galdetzen dut nahi dut gainditu omen naiz, agian, bada Kate bat komando-lerroko argumentu gisa ere. 247 00:12:06,444 --> 00:12:07,610 Hargatik probatu nahiko luke honek egindako. 248 00:12:07,610 --> 00:12:09,020 Ez dut egin hau baino lehen. 249 00:12:09,020 --> 00:12:14,244 >> Ikus dezagun, bada, programa hau exekutatu dut, agian, bada utzi komando lerroko argumentu batekin lan egiten du. 250 00:12:14,244 --> 00:12:16,140 Eh, ez segmentazio errua ez. 251 00:12:16,140 --> 00:12:17,870 Esan besterik ez da niretzat illuna dudala egindako. 252 00:12:17,870 --> 00:12:19,170 Beraz, agian, hemen konpondu da. 253 00:12:19,170 --> 00:12:27,560 Eta hain zuzen ere, atzera joan nintzen gero begiratu iturburu buggy1.c kodea du, 254 00:12:27,560 --> 00:12:31,180 zer egiten ari naizen bezala da, nahiz eta badirudi I dei bat nahi gabe strcmp egiten ari naiz 255 00:12:31,180 --> 00:12:34,010 Izan ere argv [1] existitzen den egiaztatzen. 256 00:12:34,010 --> 00:12:36,730 Hau da, benetan source buggy1.c kodea. 257 00:12:36,730 --> 00:12:38,855 Beraz, ez dut zer egin behar den egin hemen nire programa konpondu, 258 00:12:38,855 --> 00:12:40,835 suposatuz daukat nire aurrean archivo da 259 00:12:40,835 --> 00:12:44,740 besterik txeke bat gehitzeko egin Ziur argc duten 2 berdina da. 260 00:12:44,740 --> 00:12:47,780 Beraz, adibide honetan, berriro ere, esan nuen bezala pixka bat contrived, ezta? 261 00:12:47,780 --> 00:12:49,840 Ari zara, oro har, ez da joan ustekabean ezabatu Zure iturburu 262 00:12:49,840 --> 00:12:51,820 eta ondoren saiatu eta programa arazteko. 263 00:12:51,820 --> 00:12:53,120 Baina, zorionez, eman you ilustrazio bat 264 00:12:53,120 --> 00:12:55,120 Gauza mota duten Pentsatzen ahal duzu buruz 265 00:12:55,120 --> 00:12:56,610 duzu zure programa arazketa ari den bezala. 266 00:12:56,610 --> 00:12:58,760 >> Zer da gaietarako hemen egoera? 267 00:12:58,760 --> 00:13:00,510 Zer egin behar dut aldagai me irisgarria izan? 268 00:13:00,510 --> 00:13:03,600 Non zehazki nire programa bat da , bertan behera gelditzen zer lerroan, 269 00:13:03,600 --> 00:13:05,240 deritzoguna zer funtzio nahi duzu? 270 00:13:05,240 --> 00:13:06,952 Nolako Arrastoak hori eman dit? 271 00:13:06,952 --> 00:13:08,910 Eta hori da hain zuzen du mentalitatea mota duzula 272 00:13:08,910 --> 00:13:12,820 zaudenean sartu behar dira lortzean Zure programen arazketa pentsatzen. 273 00:13:12,820 --> 00:13:13,820 >> Naiz Doug Lloyd. 274 00:13:13,820 --> 00:13:16,140 Hau CS50 da. 275 00:13:16,140 --> 00:15:08,642