DOUG LLOYD: eskuineko GDB guztiak. Zer da zehazki? Beraz, GDB, horrek nabarmentzen GNU Debugger du, benetan awesome tresna bat da ezin dugula erabili lagunduko digu gure programak arazteko, edo jakin non gauzak dira gaizki joan gure programetan. GDB da amazingly indartsua, baina Irteera eta elkarrekintza berarekin Pixka bat críptica izan daiteke. Ohi da komando lerroko tresna bat, eta mezu asko bota daiteke at. Eta berak gogor egin ahal izango du analizatu zehazki zer ari den gertatzen. Zorionez, hartu dugu urrats Arazo hau konpondu ahal izateko CS50 bidez lan egiten duzun bezala. Ez bazaude grafikoa erabiliz gero araztailea, eta horrek nire lankide Dan Armandarse nahiko ongi hitz egin Pixka bat bideo batean dagoela hemen baino gehiago izan behar du oraintxe, agian behar duzu Komando-lerro hauek erabili Tresna GDB batekin lan. Zu CS50 batean lan egiten badu IDE, ez duzu behar, hori egin ahal izateko. Baina ez bazaude CS50 IDE lanean, beharbada bertsio bat erabiliz CS50 Appliance, edo beste Linux operatiboak GDB sistema instalatuta, erabili behar izango duzu komando lerroko tresna horiek. Eta geroztik dituzun ez da egin behar, da erabilgarria besterik ulertzen nola GDB komando lerrotik lan egiten du. Baina, berriro ere, ez bazaude CS50 IDE erabiliz, zuk the araztailea grafikoa erabili ahal hori IDE barneratzen. Beraz, gauza batera joan lortzeko GDB, arazketa hasteko jakin baten prozesua programa, guztiak egin behar duzun idazten da GDB eta jarraian programaren izenarekin. Beraz, adibidez, zure programa bada kaixo, hau idatzi behar duzu GDB kaixo. Noiz egin duzu, bazoazela tira GDB ingurumena. Zure gonbita aldatu egingo da, eta ordez izatearen zer da normalean da gauzak idazten duzun eko komando lerroan ls du, cd zure tipikoa guztia Linux komandoak, zure gonbita egingo, ziurrenik, zerbait aldatu parentesi bezala GDB parentesi. Hori da zure GDB gonbita berria da, izan ere, Oraindik GDB ingurumena barruan. Behin ingurumena horren barruan, Han bi komando garrantzitsu baliteke zuk erabiltzen dituzten ondoko ordenean. Lehena b da, eta horrek da break labur. Eta zuk idazten b ondoren, normalean duzu idatzi izen funtzio baten, edo jakin gertatuko baduzu zer lerro kopurua inguruan Zure programa hasita apur bat arraro portatzen, lerro bat idatzi dezakezu kopurua ez baita. Zer b, edo break, ez du da zure programa aukera ematen du lasterka hasteko puntu jakin bat arte, hots, funtzio baten izena Zehaztu duzun edo lerroa Zuk zehaztutako kopurua. Eta une horretan, hura exekuzioa izoztu egingo. Hau gauza benetan ona da, zeren behin exekuzioa izan izoztuta, has daiteke oso astiro Zure programaren bidez urratsa. Normalean, korrika dituzun izan bada Zure programak, nahiko laburrak dira. Normalean, zuk idatzi dot barra edozein dela zure programaren izena da, sakatu Sartu, eta keinu aurretik, zure programa dagoeneko amaitu da. Ez da benetan, denbora saiatu asko bertan zer oker joan. Beraz, benetan gauzak moteldu ahal izatea da behera b haustura puntu bat emanez, eta orduan ere zapaltzeko. Ondoren, behin zure break ezarri duzun Puntu, programa exekutatu ahal izango duzu. Eta edozein zalantza izanez gero komando lerroko argumentuak, horiek hemen zehazten baduzu, ez denean GDB idatzi zure programaren izena. Komando-lerroan guztia zehaztu behar duzu r, edo run hartuz argudioak, eta ondoren, edozein dela komando lerroko argumentuak zure programaren barruan behar duzu. Badira beste batzuk agertzen dira, benetan commands garrantzitsua eta erabilgarria BPG ingurunearen barruan. Hargatik besterik azkar go gehiagoko horietako batzuk. Lehena n, hau da, hurrengo laburra da, eta n hurrengo ordez idatzi dezakezu, bai lan litzateke. Eta besterik takigrafia da. Eta ziurrenik duzun dagoeneko ahaztuak gisa den, gauzak idatzi ahal izateaz erabili laburragoa da, oro har, hobeto. Eta zer egingo dela ikusiko aurrerapauso bat kode-bloke. Beraz, aurrera egingo mugitu funtzio-dei bat egin arte. Eta gero ordez Funtzio hori murgiltzen eta funtzio guztiak igaro kodea, besterik ez dute egingo da funtzioa. Funtzio deituko da. Bere lana da edozein izanda ere egin ahal izango da. Balio bat itzuliko da funtzioa deitzen da. Eta, ondoren, mugitu dituzu izateko hurrengo zenbakira deituz funtzioa duten lerroa. Zapaldu nahi baduzu funtzioaren barruan, besterik ordez izatearen , exekutatu bereziki uste arazoa dela baduzu funtzio hori barruan gezurra liteke, zitekeen, noski, ezartzen duzu break bat seinalatu funtzio hori barruan. Edo dagoeneko exekutatzen ari bazara, ezin duzu s erabili Aurrera kode-lerro bat zapalduta. Beraz, hau urratsa egingo eta funtzio sartu dive, ordez besterik ez dute exekutatu eta etengabeko funtzioa ere Oraindik ez duzula arazteko ere. Al duzu inoiz nahi bada jakin aldagai baten balioa, idatz dezakezu p, edo inprimatzeko, eta, ondoren, aldagai izena. Eta hori izango duzu inprimatzeko, GDB ingurunearen barruan, aldagaiaren izena, hori zu desenkusatzeko Niretzat aldagaiaren balioa Izendatzen duzun. Behin balioak jakin nahi baduzu nondik tokiko aldagai eskuragarria zaude zure programa, info bertakoek idatz dezakezu. Da asko baino azkarrago p idazten eta gero, edozein dela, egindako zerrendako guztiak aldagai hori existitzen ezagutzen laguntzeko. Info bertakoek idatzi ahal izango duzu, eta horrekin inprimatu egingo dena zuretzat. Hurrengo sortu da bt, hau da, Itzuli Trace labur. Orain, oro har, bereziki CS50 hasieran, Ezin izango duzu benetan ocasión bt, edo atzera traza erabili, delako ari ez funtzio beharrik duten beste funtzio deitu. Baliteke deiaren nagusi bat behar duzu funtzioa, baina hori da seguru. Ez beste funtzio hori daukazu funtzio bat deituz, bertan funtzioa beste deiak, eta abar. Baina zure programak lortu bezain gehiago konplexua da, eta, bereziki, denean lanean hasten zarenean errekurtsio batera, atzera arrastorik dezazun modu oso erabilgarria izan daiteke motatako non testuinguru batzuk lortzeko Ni nire programan dut. Beraz, esan idatzitakoa zure kodea, eta Dakizuenez nagusia funtzio bat deitzen f, horrek funtzio bat deitzen g, zein funtzio h deitzen. Beraz, zenbait geruza izan dugu habia da hemen. Oraindik barrutik bada Zure GDB ingurumena, eta zure barruan badakizu h, baina ahaztu duzu zer lortu duzu non nahi buruz are-- bt, edo atzera arrastorik idatzi dezakezu, eta egingo h, g, inprimatu, f nagusia, beste informazio batzuk, ondoan bertan arrastoren bat ematen dizu, OK nagusia f deitzen, g izeneko f, g h deitzen, eta hori da, non I Une nire programan naiz. Beraz, benetan baliagarria izan daiteke, batez ere, GDB críptica-tza gisa pixka bat jasanezinak bihurtzen da, jakin zehazki non gauzak dira. Azkenik, zure programa egiten da, edo amaitzen duzunean arazteko eta kanpoan zapaldu nahi duzu GDB ingurumena, nola atera da ezagutzen laguntzen du. Q idatz dezakezu, edo Irten, ateratzeko. Orain, gaur egungo bideo aurretik Buggy programa bat prestatu nuen buggy1 izenekoa, I konpilatu buggy1.c bezala ezagutzen fitxategi batetik. Ondoren espero zitekeen bezala, honetan programa, hain zuzen buggy da. Zerbait oker denean saiatzen naiz eta exekutatu. Orain, zoritxarrez, I oharkabean ezabatu da nire buggy1.c fitxategia, beraz, ordena me irudikatu nahi zer gaizki programa honekin joan, Erabili behar noa GDB motatako blindly, dudarik gabe programa honen bidez nabigatu daki zehazki zer oker joan. Baina besterik tresna erabiliz dagoeneko dugu buruz ikasi, Nahiko askoz irudikatu dugu out zehazki zer den. Hargatik buru izateko CS50 IDE eta begirada bat. Ados, beraz, hemen gaude, nire CS50 IDE ingurumena, eta egingo du pixka bat handiago dut beraz, apur bat gehiago ikusi ahal izango duzu. Nire terminal leihoa, I zerrendatu bada Nire egungo zuzendari edukina ls batera, ikusiko dugu dut Iturburu fitxategiak pare bat Hemen, besteak beste, Lehen aipatu dugun buggy1. Zer zehazki noiz aurrera doa Saiatu nintzen eta korrika buggy1. Beno dezagun jakin. Idazten dudanean dot barra, buggy, eta I sakatu Sartu. Segmentazio hutsegite. Hori ez da ona. Gogoratzen baduzu, a segmentazio errua normalean denean memoria sartzeko gertatzen ari garela ezin dute ukitu. Nik nolabait iritsi gara mugetatik kanpo ren programan sartu da, konpiladorea, eman digu. Eta beraz, dagoeneko hori bat den tresna-koadroko mantentzeko ideiarik arazketa prozesua hasiko dugu. Zerbait gaizki asi apur bat hemen. Ondo da, beraz, has gaitezen GDB ingurumena eta ikusi dugu irudikatu ahal bada zer da arazoa. Nire pantaila garbitzeko noa, eta naiz GDB joan idatzi dut Berriro, GDB ingurumena sartzeko, eta programaren izenarekin , arazteko buggy1 nahi dut. Mezuaren apur bat lortuko dugu, irakurtzen buggy1 ikurrak, egin. Guztiak esan nahi duen Bota kode osoa elkarrekin, eta orain izan da kargatu GDB, eta prest joan da. Orain, zer egin nahi dut? Ez zer gogoratzen duzu Lehen urratsa normalean da Naiz ingurune horren barruan ondoren? Zorionez, esan Ezarri duzu break puntu bat, izan ere, Izan ere, hori da, zer egin nahi dut. Orain, ez daukat du iturburu hau kodea nire aurrean, hau da, seguruenik Ez du erabilera kasu tipikoa, bide batez. Ziurrenik. Beraz, ona da. Baina suposatuz ez duzu, zer da badakiela du inork funtzioa C single programa guztietan badago? Ez dio axola nola handi edo konplikatuak den, funtzio honek, zalantzarik existitzen. Main, ezta? Beraz, beste guztiak izan ezean, ezin dugu break nagusia puntu bat ezarri. Eta berriro ere, besterik gabe ezin idazten dudanean apurtu nagusia, b ordez. Eta ari zaren bitxia bada, baduzu inoiz idatzi komando luzez eta orduan konturatzen zara Gauza oker idatzi, eta kendu nahi duzula besterik ez nuen guztia, Kontrol U hartu ahal izango duzu, egingo den Guztia ezabatu eta atzera ekarri Kurtsorea lerro hasieran izateko. Asko bakarrik eutsi behera baino azkarrago ezabatu edo kolpeak sorta aldiz baino gehiago. Beraz, break puntu bat ezarri dugu, aldi berean. Eta ikusiko duzunez, dugu esaten du break puntu bat ezarri dute fitxategi buggy1.c at, eta, antza denez, lehen lerroan nagusien kodea zazpi linea da. Berriz ere, ez dugu sorburu fitxategia hemen, baina bere gain hartzen dut, hori da Niri egia kontatzea. Eta gero, besterik saiatzen ari naiz eta programa abiatzean, r. Programa aurrera. Ondo da, beraz, mezu hau apur bat críptica da. Baina, batez ere, zer da hemen gertatzen da, besterik ez da me kontatzea hit dut nire break Puntu, break puntu kopurua 1. Eta gero, kode lerro bat, hala nola, fitxategia edo direktorioa ez. Arrazoi bakarra dela Mezu hori ikusten dut da I oharkabean delako Nire buggy.c fitxategia ezabatu. Nire buggy1.c fitxategia existitu bada uneko direktorioan, lerro ez litzateke benetan eskubide hori esaidazu zer kode lerro literalki irakurtzen. Zoritxarrez, ezabatu dut. Mota nabigatu dute goaz Hau apur bat gehiago blindly bidez. Ados, beraz, ikus dezagun, zer Zer ikusi, zer egin nahi dut? Beno, zer tokiko jakin nahi nuke aldagai agian niretzat eskuragarri. Nire programa hasi naiz. Zer izan daitekeen ikus-en Dagoeneko guretzat hasieratu. Idazten dudanean Info bertakoek, bertakoek ez. Ondo da, beraz, ez du eman zidan informazio tona bat. Saiatu dira, eta inprimatzeko, aldagai bat izan dut, baina ez dakit izenik aldakorra. Atzera arrastorik saiatu izan dut, baina nago nagusiaren barruan, beraz, ezagutzen dut ez dut egin Funtzio beste dei oraintxe. Beraz, itxura nire aukera bakarra dira n edo hain erabiltzeko eta murgiltze hasteko. N erabili noa. Beraz idazten dudanean n. Oh my gosh, zer gertatzen da hemen. Programa jasotako seinaleak, SIGSEGV segmentazio errua, eta gero gauzak sorta oso bat. Larritu naiz jada. Beno, ez da benetan bat asko hemen ikasi behar. Beraz, zer esango digu? Zer egiten digun da, programa hau da buruz, baina ez du oraindik, seg errua. Eta, batez ere, noa are gehiago hemen gerturatzeko, buruz seg errua buruz strcmp izeneko zerbait. Orain, agian, ez dute eztabaidatu dugu Funtzio honek zabala. Baina ari gara, ez delako is-- da funtzio guztietan buruz hitz egin behar da, C estandarra existitzen liburutegia baina guztiak zure eskura daudela, bat hartu bereziki baduzu reference.cs50.net begiratzeko. Eta strcmp da benetan indartsu bat Funtzio badagoela barruan the String.h goiburua fitxategia, goiburua da hori funtzio eskainitako fitxategia lan egiten duten eta manipulatzeko kateak. Eta, batez ere, zer strcmp egiten da bi kateak balioak alderatzen ditu. Beraz, errua Segmentaziuo behar banintz Dei bat egiten ari da, dirudienez strcmp izateko. Hit I n, eta hain zuzen ere mezua jasoko dut, programa seinalea SIGSEGV amaitu segmentazio errua. Beraz, gaur Benetan seg failatuta dut, eta nire programa nahiko askoz eraginkortasunez amore eman. Honek programaren amaiera izango da. Behera hautsi, huts egin. Beraz, ez zen asko, baina ez dut Benetan egin nahiko pixka bat ikasi esperientzia gutxi honetatik. Zer ikasi dut? Beno, nire programa izorratzen Nahiko askoz berehala. My programa izorratzen on bat deitzeko strcmp, baina ez dut ez edozein aldagai lokalak izan ere, nire garai hondatzen duten programa. Beraz, zer katea, edo kateak, Izan ziurrenik alderatzea izan dut. Ez badut dute lokalik aldagaiak, baliteke surmise ez have-- dudala agian da aldagai global, egia izan daiteke. Baina, oro har, badirudi atsegin dut alderatuz Existitzen ez den zerbait. Hargatik ikertu apur bat gehiago dela. Beraz, ez dut nire pantaila garbitzeko joan. To kanpora irten noa GDB bigarren bat ingurumena. Eta, pentsatzen Ados nago, beraz, ez da no tokiko nire programan aldagai. Galdetzen dut nahi dut gainditu omen naiz, agian, bada Kate bat komando-lerroko argumentu gisa ere. Hargatik probatu nahiko luke honek egindako. Ez dut egin hau baino lehen. Ikus dezagun, bada, programa hau exekutatu dut, agian, bada utzi komando lerroko argumentu batekin lan egiten du. Eh, ez segmentazio errua ez. Esan besterik ez da niretzat illuna dudala egindako. Beraz, agian, hemen konpondu da. Eta hain zuzen ere, atzera joan nintzen gero begiratu iturburu buggy1.c kodea du, zer egiten ari naizen bezala da, nahiz eta badirudi I dei bat nahi gabe strcmp egiten ari naiz Izan ere argv [1] existitzen den egiaztatzen. Hau da, benetan source buggy1.c kodea. Beraz, ez dut zer egin behar den egin hemen nire programa konpondu, suposatuz daukat nire aurrean archivo da besterik txeke bat gehitzeko egin Ziur argc duten 2 berdina da. Beraz, adibide honetan, berriro ere, esan nuen bezala pixka bat contrived, ezta? Ari zara, oro har, ez da joan ustekabean ezabatu Zure iturburu eta ondoren saiatu eta programa arazteko. Baina, zorionez, eman you ilustrazio bat Gauza mota duten Pentsatzen ahal duzu buruz duzu zure programa arazketa ari den bezala. Zer da gaietarako hemen egoera? Zer egin behar dut aldagai me irisgarria izan? Non zehazki nire programa bat da , bertan behera gelditzen zer lerroan, deritzoguna zer funtzio nahi duzu? Nolako Arrastoak hori eman dit? Eta hori da hain zuzen du mentalitatea mota duzula zaudenean sartu behar dira lortzean Zure programen arazketa pentsatzen. Naiz Doug Lloyd. Hau CS50 da.