DOUG LLOYD: All GDB ceart. Cad é go díreach? Mar sin GDB, a sheasann don Debugger GNU, Is uirlis ndáiríre uamhnach gur féidir linn úsáid chun cabhrú linn dífhabhtaithe ár gcláir, nó i gcás ina bhfuil rudaí a fháil amach dul cearr inár gcláir. Is GDB amazingly cumhachtach, ach an t-aschur agus idirghníomhaíocht leis Is féidir a bheith le beagán cryptic. Tá sé de ghnáth uirlis-orduithe, agus Is féidir é a chaitheamh ar a lán de na teachtaireachtaí ag tú. Agus is féidir é de chineál ar deacair a pharsáil go díreach cad atá ar siúl. Céimeanna Fortunately, tá muid tógtha a shocrú an fhadhb ar do shon mar atá tú ag obair trí CS50. Mura bhfuil tú ag baint úsáide as an grafach dífhabhtóir, a mo chomhghleacaí Dan Armandarse labhair go leor le beagán faoi i físeán go Ba chóir go mbeadh níos mó ná anseo ceart anois, d'fhéadfadh gá duit chun úsáid na n-orduithe uirlisí a bheith ag obair le GDB. Má tá tú ag obair sa CS50 IDE, ní gá duit é seo a dhéanamh. Ach mura bhfuil tú ag obair sa IDE CS50, b'fhéidir ag baint úsáide as leagan de Fearas CS50, nó Linux eile oibriúcháin córas le GDB suiteáilte ar sé, b'fhéidir go mbeadh ort a úsáid na huirlisí orduithe. Agus ós rud é a d'fhéadfadh tú ní mór é sin a dhéanamh, tá sé úsáideach ach chun tuiscint a fháil ar conas Oibríonn GDB na n-orduithe. Ach arís, má tá tú ag baint úsáide as an IDE CS50, tú Is féidir a bhaint as an dífhabhtóir grafach go bhfuil tógtha isteach an IDE. Mar sin, a fháil rudaí ag dul leis GDB, chun tús a chur leis debugging próiseas ar leith clár, ní mór go léir a dhéanamh Tá cineál GDB dhiaidh ag an ainm an chláir. Mar sin, mar shampla, má tá do chlár Dia duit, ba mhaith leat cineál GDB Dia duit. Nuair a dhéanann tú sin, tá tú ag dul a tharraingt suas ar an gcomhshaol GDB. Dearbhófar do pras a athrú, agus in ionad iad a cad é de ghnáth Is rudaí nuair a scríobhann tú ag na LS line-- ordú, cd-- gach ceann de do tipiciúil Linux orduithe, do pras Beidh athrú go, is dócha, rud éigin cosúil le lúibíní lúibíní GDB. Sin do GDB pras nua, mar gheall ar tá tú taobh istigh an gcomhshaol GDB. Chomh luath agus taobh istigh den timpeallacht sin, níl dhá orduithe móra go mbainfidh tú úsáid is dócha san ord seo a leanas. Is é an chéad b, a Is gearr do sos. Agus tar éis a scríobhann tú b, tú de ghnáth cineál an t-ainm feidhme, nó má tharlaíonn tú a fhios timpeall cén uimhirlíne Is é do chlár ag tosú iad féin a iompar ar beag aisteach, is féidir leat cineál líne Uimhir ann chomh maith. Cad b, nó sos, a dhéanann is ceadaíonn sé do chlár a rith suas go dtí pointe áirithe, eadhon, an t-ainm na feidhme go bhfuil tú a shonrú nó an líne Uimhir a bhfuil tú a shonrú. Agus ag an bpointe sin, sé Beidh reo fhorghníomhú. Is é seo an rud gur maith, mar gheall ar a luaithe a fhorghníomhú curtha reoite, Is féidir leat tús a chur go han-mhall céim trí do chlár. De ghnáth, má atá tú ag rith do chláir, tá siad go leor gearr. De ghnáth, scríobhann tú ponc Slais cuma cad an t-ainm do chlár é, bhuail Iontráil, agus sula féidir leat blink, do Tá an clár críochnaithe cheana féin. Níl sé i ndáiríre a lán ama chun iarracht a agus figiúr amach cad atá ar siúl mícheart. Mar sin tá sé i ndáiríre a bheith in ann rudaí mall síos ag leagan pointe sos le b, agus ansin ghéarú i. Ansin, nuair atá tú a leagtar do bhriseadh pointe, is féidir leat a reáchtáil ar an gclár. Agus má tá aon argóintí orduithe, tú a shonrú orthu anseo, ní nuair focail a GDB d'ainm an chláir. Tú a shonrú go léir na n-orduithe argóintí ag cur r, nó a reáchtáil, agus ansin argóintí líne is cuma cén orduithe is gá duit taobh istigh de do chlár. Tá roinnt de eile i ndáiríre orduithe tábhachtach agus úsáideach taobh istigh den timpeallacht OTI. Mar sin, lig dom ach go tapa dul thar cuid acu. Is é an chéad n, atá gearr do chugainn, agus is féidir leat cineál romhainn in ionad n, Bheadh ​​an dá obair. Agus tá sé ach an luathscríbhinn. Agus mar atá tú is dócha gotten cheana a úsáidtear chun, a bheith in ann rudaí a chlóscríobh Is giorra go ginearálta níos fearr. Agus cad a bheidh sé a dhéanamh go bhfuil sé go mbainfidh céim ar aghaidh aon bloc de chód. Mar sin, beidh sé dul ar aghaidh go dtí go glao feidhm. Agus ansin in ionad tumadóireacht isteach an bhfeidhm agus ag dul trí gach ceann de na feidhmeanna sin cód, beidh sé ag an fheidhm díreach. Beidh an fheidhm a dtugtar. Beidh sé a dhéanamh is cuma cad é a chuid oibre. Beidh sé a luach a thabhairt ar ais an fheidhm a dtugtar sé. Agus ansin beidh tú ag bogadh ar aghaidh go dtí an chéad líne eile na feidhme sin ag glaoch. Más mian leat chun dlús a taobh istigh na feidhme, seachas díreach tar éis sí i gcrích, go háirithe má cheapann tú go bhfuil an fhadhb D'fhéadfadh bréag taobh istigh na feidhme sin, d'fhéadfaí tú, ar ndóigh, a leagtar sos pointe taobh istigh na feidhme sin. Nó má tá tú ag rith cheana féin, is féidir leat s a úsáid chun céim ar aghaidh líne amháin de chód. Mar sin, beidh sé seo céim i agus Léim i bhfeidhmeanna, seachas go bhfuil ach an fhorghníomhú agus ag leanúint ar an bhfeidhm i go bhfuil tú i do debugging. Más mian leat riamh a fhios an luach athróg, is féidir leat cineál p, nó Print, agus ansin an t-ainm athraitheach. Agus beidh a phriontáil amach a thabhairt duit, taobh istigh den timpeallacht GDB, an t-ainm ar an athróg, go you-- leithscéal me-- an luach na hathróige go atá tú ainmnithe. Más mian leat a fhios ag na luachanna de gach athróg inrochtana áitiúil ó áit Tá tú faoi láthair i do clár, is féidir leat cineál muintir na háite info. Tá sé a lán níos tapúla ná clóscríobh p agus ansin is cuma cad, liostú amach gach ceann de na athróga a fhios agat ann. Is féidir leat cineál muintir na háite info, agus é a Beidh phriontáil amach gach rud ar do shon. Next suas BT, a bhfuil ghearr do ais Trace. Anois, go ginearálta, go háirithe go luath i CS50, ní bheidh ort ócáid ​​i ndáiríre BT, nó Ar ais Trace a úsáid, toisc nach bhfuil tú ag a bhfuil feidhmeanna go glaoch feidhmeanna eile. D'fhéadfá a bheith príomh glaoch ar fheidhm, ach sin is dócha é. Ní gá duit go fheidhm eile ag glaoch feidhm eile, a glaonna feidhm eile, agus mar sin de. Ach de réir mar a fháil ar do chláir níos casta, agus go háirithe nuair a dtosaíonn tú ag obair le recursion, rian ar ais Is féidir a bheith ar bhealach i ndáiríre úsáideach chun ligean duit de chineál ar a fháil ar roinnt comhthéacs do áit Tá mé i mo chlár. Mar sin, deir tú atá scríofa do chód, agus tá a fhios agat go bhfuil gá, is mó feidhm f, a glaonna feidhm g, a glaonna ar h feidhm. Mar sin, ní mór dúinn roinnt sraitheanna de neadaithe ar siúl anseo. Má tá tú taobh istigh de do thimpeallacht GDB, agus tá a fhios agat do taobh istigh de h, ach tú dearmad faoi ​​na rudaí a fuair tú go dtí an áit leat are-- is féidir leat cineál BT, nó rian ar ais, agus beidh sé a phriontáil amach h, g, f mó, taobh le faisnéis éigin eile, a Tugann tú a clue go bhfuil, is mó OK ar a dtugtar f, f dtugtar g, g ar a dtugtar h, agus sin i gcás mé Táim faoi láthair i mo chlár. Ionas gur féidir é a bheith úsáideach i ndáiríre, go háirithe mar an cryptic-gnó de GDB thiocfaidh chun bheith ina beag mór, go fháil amach go díreach i gcás ina bhfuil rudaí. Ar deireadh, nuair a bhfuil do chlár a dhéanamh, nó nuair atá tú ag déanamh debugging é agus ba mhaith leat a céim amach as an timpeallacht GDB, cuidíonn sé a fhios conas a fháil amach inti. Is féidir leat cineál q, nó Scoir, a fháil amach. Anois, sula físeán an lae inniu D'ullmhaigh mé clár Buggy ar a dtugtar buggy1, a thiomsaigh mé ó chomhad a dtugtar buggy1.c. Mar a d'fhéadfadh a bheith ag súil, seo Tá an clár i ndáiríre Buggy. Théann rud éigin mícheart nuair mé iarracht a dhéanamh agus rith sé. Anois, ar an drochuair, tá mé neamhaireach scriostar mo chomhad buggy1.c, mar sin d'fhonn dom a figiúr amach cad atá ar siúl cearr leis an gclár seo, Tá mé ag dul a bheith acu a úsáid GDB chineál ar blindly, ag iarraidh nascleanúint a dhéanamh tríd an gclár seo figiúr amach go díreach cad atá ar siúl mícheart. Ach ag baint úsáide as ach na huirlisí againn foghlamtha cheana féin faoi, is féidir linn an figiúr go leor i bhfad amach go díreach a bhfuil sé. Mar sin, a ligean ar ceann ar aghaidh go dtí Tá CS50 IDE agus le breathnú. OK, mar sin go bhfuil muid anseo i mo CS50 IDE timpeallacht, agus beidh mé súmáil isteach le beagán ionas gur féidir leat a fheiceáil beagán níos mó. I mo fhuinneog críochfort, más rud é liosta mé an t-ábhar de mo stiúrthóir reatha le LS, beidh orainn a fheiceáil go bhfuil mé tá cúpla de chomhaid foinse anseo, lena n-áirítear an pléadh roimhe buggy1. Cad é go díreach a théann ar nuair Déanaim iarracht agus a reáchtáil buggy1. Bhuel a ligean ar a fháil amach. Cineál mé ponc Slais, Buggy, agus mé bhuail Iontráil. Lochtanna deighilt. Ní Sin maith. Má tá tú chun cuimhne, ar locht deighilt de ghnáth Tarlaíonn nuair a muid rochtain cuimhne nach bhfuil muid ag cead chun teagmháil. Táimid tar éis bainte amach ar bhealach taobh amuigh de na bounds de cad é an chláir, an tiomsaitheoir, a thabhairt dúinn. Agus mar sin cheana go bhfuil clue a choinneáil sa bosca uirlisí mar muid ag cur tús leis an bpróiseas debugging. Tá Rud imithe mícheart beag anseo. Gach ceart, mar sin a ligean tús suas an timpeallacht GDB agus féach an féidir linn a dhéanamh amach cad é go díreach é an fhadhb. Tá mé ag dul go soiléir mo scáileán, agus tá mé ag dul chun cineál GDB arís, chun dul isteach ar an gcomhshaol GDB, agus ainm an chláir gur mhaith liom a dífhabhtaithe, buggy1. Faighimid teachtaireacht beag, léamh siombailí ó buggy1, a rinneadh. Gach go chiallaíonn go bhfuil tharraing sé le chéile gach ceann de na cód, agus anois tá sé curtha luchtú isteach GDB, agus tá sé réidh le dul. Anois, cad mé ag iarraidh a dhéanamh? An bhfuil tú a thabhairt chun cuimhne cad é an Is é an chéad chéim de ghnáth tar éis Tá mé taobh istigh den timpeallacht seo? Súil go dtosnódh, dúirt tú a leagtar pointe sos, mar gheall ar i bhfíric go bhfuil cad ba mhaith liom a dhéanamh. Anois, ní dóigh liom go bhfuil an cód foinse do seo i os comhair dom, is dócha nach bhfuil an cás a úsáid tipiciúil, dála an scéil. Beidh tú is dócha. Mar sin, go maith. Ach ag glacadh leis nach bhfuil tú, cad atá an fheidhm amháin go bhfuil a fhios agat ann i ngach clár C amháin? Níl cuma cé chomh mór nó cé chomh casta bhfuil sé, ann an fheidhm seo cinnte. Is mó, ceart? Mar sin, ina éagmais gach rud eile, is féidir linn a a shocrú le pointe sos ag mó. Agus arís, raibh mé in ann ach cineál sos is mó, in ionad b. Agus má tá tú aisteach, má tá tú riamh chlóscríobh amach a dtoil fada agus ansin a thuiscint go bhfuil tú chlóscríobh ar an rud mícheart, agus ba mhaith leat chun fáil réidh de gach mar a rinne mé díreach tar éis, is féidir leat Rialú U, a bheidh scriosadh gach rud agus thabhairt duit ar ais go dtí tús na línte cúrsóir. A lán níos tapúla ná mar a shealbhú síos ach an scriosadh, nó ag bualadh sé a bunch amanna os a chionn. Mar sin, beidh orainn a shocrú le pointe sos ag mó. Agus mar is féidir leat a fheiceáil, a deir sé tá muid a shocrú le pointe sos ag buggy1.c comhad, agus is cosúil an chéad líne de chód príomh líne seacht. Arís, nach bhfuil againn an comhad foinse anseo, ach beidh mé glacadh leis go bhfuil sé ag insint dom an fhírinne. Agus ansin, tá mé ag iarraidh ach agus a reáchtáil ar an gclár, r. Clár ag tosú. Ceart go leor, mar sin an teachtaireacht seo Is beag cryptic. Ach go bunúsach cad atá Is ag tarlú anseo tá sé ach ag insint dom Tá mé bhuail mo sos pointe, sos pointe uimhir 1. Agus ansin, an líne de chód, aon comhad nó eolaire sin. An chúis amháin go Tá mé ag féachaint go teachtaireacht Is mar gheall mé neamhaireach scriostar mo chomhad buggy.c. Má bhí ann mo chomhad buggy1.c sa chomhadlann reatha, an ceart sin ag teacht ann a bheadh ​​i ndáiríre inis dom cad é an líne de chód literally léann. Ar an drochuair, scrios mé é. Táimid ag dul a bheith acu chun cineál nascleanúint tríd an beagán níos mó blindly. OK, mar sin a ligean ar a fheiceáil, cad a mé ag iarraidh a dhéanamh anseo? Bhuel, ba mhaith liom a fháil amach cad áitiúla Tá athróg b'fhéidir ar fáil dom. Tá mé tosaithe mo chlár. A ligean ar a fheiceáil cad a d'fhéadfadh a bheith initialized cheana féin le haghaidh dúinn. Cineál mé muintir na háite Info, gan aon muintir na háite. Ceart go leor, mar sin nach ndéanann a thabhairt dom a ton eolais. Raibh mé in ann iarracht a dhéanamh agus a phriontáil amach athróg, ach níl a fhios agam aon ainmneacha athraitheach. Raibh mé in ann triail a rian ar ais, ach tá mé taobh istigh de phríomh, mar sin tá a fhios agam nach bhfuil déanta agam glaoch fheidhm eile ceart anois. Mar sin Breathnaíonn an nós iad na roghanna ach amháin a úsáid n nó mar sin agus tús chun tumadóireacht a dheanamh i. Tá mé ag dul n a úsáid. Mar sin, cineál mé n. OH mo gosh, cad siúl anseo. Clár a fuarthas comharthaí, SIGSEGV locht deighilt, agus ansin a bunch iomlán de stuif. Tá mé overwhelmed cheana. Bhuel, níl i ndáiríre go leor le foghlaim anseo. Mar sin, cad a chiallaíonn sé sin dúinn? Cad a insíonn sé dúinn go bhfuil, tá an clár ar tí, ach nach bhfuil fós, locht seg. Agus go háirithe, tá mé ag dul chun súmáil isteach níos faide anseo, tá sé faoi locht a GSE faoi rud ar a dtugtar strcmp. Anois, ní féidir linn a bheith pléite fheidhm sin go forleathan. Ach is-- sé toisc nach bhfuil muid ag dul chun labhairt faoi gach feidhm a ann sa chaighdeán C library-- ach tá siad ar fáil gach duit, go háirithe má ghlacann tú le féachaint ar reference.cs50.net. Agus is é strcmp ndáiríre cumhachtach fheidhm atá ann taobh istigh an header string.h comhad, a bhfuil header comhad go tiomanta chun feidhmeanna an obair sin le agus teaghráin ionramháil. Agus go háirithe, cad a dhéanann strcmp é i gcomparáid é na luachanna de dhá teaghráin. Mar sin, tá mé ar tí locht a deighleoige ar glao a strcmp is cosúil. Bhuail mé n, agus go deimhin a rachaidh mé an teachtaireacht, clár fhoirceannadh le SIGSEGV comhartha locht deighilt. Mar sin, anois Tá mé faulted seg ndáiríre, agus tá mo chlár deas i bhfad a thabhairt suas go héifeachtach. Is é seo an deireadh an chláir. Bhris sé síos, crashed sé. Mar sin, ní raibh go leor, ach tá mé iarbhír a rinne a fhoghlaim go leor le beagán as an taithí beag. Cad é atá foghlamtha agam? Bhuel, de dheasca mo chlár go leor i bhfad láithreach. De dheasca mo chlár ar a ghlaoch chun strcmp, ach tá mé nach bhfuil aon athróg áitiúla i mo clár ag an am a tuairteanna sé. Mar sin, cad teaghrán, nó teaghráin, Raibh mé in ann a bheith, b'fhéidir, i gcomparáid. Más rud é nach féidir liom aon áitiúla athróg, d'fhéadfadh tú surmise go have-- mé ann b'fhéidir go bhfuil domhanda athraitheach, a d'fhéadfadh a bheith fíor. Ach go ginearálta, is cosúil cosúil Tá mé ag i gcomparáid chun rud éigin nach bhfuil ann. Mar sin, a ligean ar a imscrúdú go beag breise. Mar sin, tá mé ag dul go soiléir mo scáileán. Tá mé ag dul a scor as an GDB timpeallacht le haghaidh an dara. Agus tá mé ag smaoineamh, ceart go leor, mar sin níl aon athróg áitiúil i mo chlár. N'fheadar má b'fhéidir tá mé ceaptha a pas a fháil i teaghrán mar argóint-orduithe. Mar sin, a ligean ar thástáil ach seo amach. Nach bhfuil mé déanta roimh seo. A ligean ar a fheiceáil má b'fhéidir má ritheann mé an clár seo le argóint an líne ordaithe a oibríonn sé. Huh, gan aon locht deighilt ann. Dúirt sé ach dom go figured mé amach é. Agus mar sin b'fhéidir go bhfuil an shocrú anseo. Agus go deimhin, má théann mé ar ais agus féachaint ar an cód foinse iarbhír buggy1.c, dealraíonn sé mar cé go cad mé ag déanamh go bhfuil Tá mé ag déanamh glao a strcmp gan seiceáil a dhéanamh cibé i ndáiríre argv [1] ann. Tá sé seo i ndáiríre an cód foinse do buggy1.c. Mar sin, cad is gá dom i ndáiríre a dhéanamh anseo mo chlár a shocrú, glacadh leis go bhfuil mé an comhad i os comhair dom, a chur ach seiceáil a dhéanamh cinnte go bhfuil argc cothrom le 2. Mar sin, sampla seo, arís, mar a dúirt mé, Is le beagán suarach, ceart? Nach bhfuil tú ag dul go ginearálta le thaisme scriosadh do cód foinse agus ansin chun iarracht a dhéanamh agus dífhabhtaigh an chláir. Ach tá súil againn, thug sé tú léiriú de na cineálacha rudaí a d'fhéadfá a bheith ag smaoineamh ar mar a bhfuil tú ag debugging do chlár. Cad é an staid chúrsaí anseo? Cad iad na hathróga a dhéanfaidh mé ní mór inrochtana dom? Cá bhfuil mo chlár go díreach crashing, ar an méid a líne, ar an méid a ghlaoch le cad fheidhm? Cén cineál leideanna bhfuil a thabhairt dom? Agus sin go díreach ar an de chineál ar mindset go bhfuil tú Ba chóir a bheith ag fáil isteach nuair a bhíonn tú ag smaoineamh faoi debugging do chláir. Tá mé Doug Lloyd. Is é seo an CS50.