Doug Lloyd: Tout dwa gdb. Ki sa li egzakteman? Se konsa, gdb, ki vle di pou GNU debugjeur a, se yon zouti vrèman fantastik ke nou ka itilize yo ede nou debug pwogram nou an, oswa chèche konnen ki kote bagay sa yo yo ale mal nan pwogram nou yo. Gdb se étonant pwisan, men pwodiksyon an ak entèraksyon ak li kapab yon ti jan skre. Li nan anjeneral yon zouti liy lòd, ak li ka voye jete yon anpil nan mesaj nan ou. Apre sa, li kapab kalite difisil yo analizan ekzakteman ki sa k ap pase sou. Erezman, nou te pran etap yo ranje pwoblèm sa a pou ou jan ou travay nan CS50. Si ou pa lè l sèvi avèk grafik la ap debugjeur, ki Dann kolèg mwen Armandarse te di l 'byen yon ti jan sou nan yon videyo ki yo ta dwe sou isit la kounye a, ou ta ka bezwen yo sèvi ak liy lòd sa yo zouti yo travay avèk gdb. Si w ap travay nan CS50 nan IDE, ou pa bezwen fè sa. Men, si ou pa ap k ap travay nan CS50 IDE a, petèt lè l sèvi avèk yon vèsyon nan CS50 Aparèy, oswa yon lòt Linux opere sistèm ak gdb enstale sou li, ou ka bezwen sèvi ak sa yo liy lòd zouti. E depi ou ta ka ou dwe fè sa, li la itil jis konprann ki jan Gdb travay soti nan liy la lòd. Men, ankò, si w ap lè l sèvi avèk IDE la CS50, ou ka itilize debugjeur a grafik ki se bati nan IDE a. Se konsa, yo ka resevwa bagay sa yo ale ak Gdb, yo kòmanse nan debogaj pwosesis pou yon patikilye pwogram, tout sa ou bezwen fè se tape gdb swiv pa non an pwogram lan. Se konsa, pou egzanp, si pwogram ou a se hello, ou ta tape gdb hello. Lè ou fè sa, w ap ale rale moute anviwònman an gdb. Èd memwa ou a ap chanje, ak olye pou yo te sa li anjeneral se lè ou tape bagay a line-- lòd ls yo, cd-- tout nan òdinè ou Linux kòmande, èd memwa ou pral chanje a, pwobableman, yon bagay tankou parantèz gdb parantèz. Sa a nouvo gdb èd memwa ou, paske w ap andedan anviwònman an gdb. Yon fwa andedan nan anviwònman sa, gen nan pi gwo kòmandman de ke ou pral pwobableman itilize yo nan lòd sa a. Premye a se b, ki se kout pou repo. Apre yo te fin ou tape b, ou tipikman tape non an nan yon fonksyon, oswa si ou rive konnen alantou ki nimewo liy pwogram ou se kòmanse konpòte yo yon ti kras etranj, ou ka tape yon liy Nimewo gen kòm byen. Ki sa ki b, oswa repo, èske se li pèmèt pwogram ou nan kouri moute jouk yon pwen sèten, savwa, non an nan fonksyon an ke ou presize oswa liy lan Nimewo ke ou presize. Apre sa, nan pwen sa a, li pral jele ekzekisyon. Sa a se yon reyèlman bon bagay, paske yon fwa ekzekisyon ki te nan frizè, ou ka kòmanse trè dousman etap nan pwogram ou an. Tipikman, si ou ve yo te kouri pwogram ou yo, yo ap trè kout. Anjeneral, ou tape dot koupe tou sa se non an nan pwogram ou an, frape Antre, ak anvan ou kapab bat, ou Pwogram deja fini. Li pa reyèlman yon anpil tan eseye ak figi konnen sa k ap pase sa ki mal. Se konsa, li vrèman pou kapab ralanti bagay sa yo desann nan mete yon pwen repo ak b, ak Lè sa a kite a. Lè sa a, yon fwa ou te mete repo ou pwen, ou ka kouri pwogram nan. Men, si ou gen nenpòt agiman liy lòd, ou presize yo isit la, pa lè ou tape gdb Non pwogram ou an. Ou presize tout liy la bay lòd agiman lè yo pran r, oswa kouri, ak Lè sa a liy tou sa lòd agiman ou bezwen andedan nan pwogram ou an. Genyen yon kantite nan lòt reyèlman enpòtan ak itil kòmandman andedan nan anviwònman an GDP. Se konsa, kite m 'jis byen vit ale sou kèk nan yo. Premye a se n, ki se kout pou vini an, epi ou ka tape pwochen olye pou yo n, tou de ta travay. Apre sa, li nan jis steno nan. Ak jan ou te pwobableman deja vinn itilize yo, ke yo te kapab tape bagay pi kout se jeneralman pi byen. Ak sa ki li pral fè se li pral etap pou pi devan yon blòk nan kòd. Se konsa, li pral avanse pou pi devan jiskaske yon apèl fonksyon. Lè sa a, olye pou yo plonje nan ki fonksyon ak ale atravè tout nan tout sa fonksyon Kòd, li pral jis gen fonksyon an. Pral fonksyon an ap rele. Li pral fè tou sa travay li se. Li pral retounen yon valè nan fonksyon an ki rele l '. Lè sa a, ou pral deplase sou li nan la liy pwochen nan ki fonksyon rele. Si ou vle nan etap andedan nan fonksyon an, olye pou yo jis gen li egzekite, espesyalman si ou panse ke pwoblèm nan ta ka bay manti andedan nan ki fonksyon, , ou te kapab, nan kou, mete yon ti repo pwen andedan nan ki fonksyon. Oswa si w ap deja kouri, ou kapab itilize nan nan etap pou pi devan yon sèl liy nan kòd. Se konsa, sa a pral etap nan ak plonje nan fonksyon, olye pou yo jis gen egzekite nan ak kontinye sou nan fonksyon an ke w ap nan pou debogaj. Si ou janm vle konnen valè a nan yon varyab, ou ka tape p, oswa Ekri an lèt detache, ak Lè sa a non an varyab. Apre sa, ki pral enprime soti nou la a, andedan nan anviwònman an gdb, non an nan varyab la, ki you-- eskize mele l valè a nan varyab la ke ou te rele. Si ou vle konnen valè yo nan chak lokal varyab soti nan kote aksesib ou kounye a se nan ou pwogram, ou ka tape moun nan lokalite info. Li se yon anpil pi vit pase sezisman p ak Lè sa a kèlkeswa sa, lis soti tout nan la varyab ke ou konnen egziste. Ou ka tape moun nan lokalite info, epi li pral enprime soti tout bagay pou ou. Next moute se bt, ki se kout pou Retounen Trace. Koulye a, jeneralman, patikilyèman byen bonè nan CS50, ou pa pral reyèlman gen okazyon yo sèvi ak bt, oswa Retounen Trace, paske ou pa ap gen fonksyon ki rele lòt fonksyon. Ou ta ka gen prensipal rele yon fonksyon, men sa a pwobableman li. Ou pa gen lòt fonksyon ki rele yon lòt fonksyon, ki rele yon lòt fonksyon, ak sou sa. Men, jan pwogram ou jwenn plis konplèks, ak patikilyèman lè ou kòmanse travay ak rkursyon, tounen tras kapab yon fason reyèlman itil nan fè w kalite jwenn kèk kontèks pou kote Se mwen menm ki nan pwogram m 'yo. Se konsa, di ou te ekri kòd ou a, ak ou konnen ke prensipal rele yon fonksyon f, ki fè apèl yon fonksyon g, ki rele yon h fonksyon. Se konsa, nou gen plizyè kouch a nidifikasyon ale sou isit la. Si ou se andedan nan anviwònman gdb ou, epi ou konnen ou anndan a h, men ou bliye sou sa ki te resevwa ou nan kote ou sont- ou ka tape bt, oswa tounen tras, epi li pral enprime soti h, g, f prensipal yo, ansanm ak kèk lòt enfòmasyon, ki ba ou yon siy ke, OK prensipal rele f, f rele g, g rele h, e ke sa a kote mwen kounye a menm mwen nan pwogram m 'yo. Se konsa, li kapab reyèlman itil, espesyalman kòm skre-bay gwo biznis la nan gdb vin tounen yon ti kras akablan, nan chèche konnen egzakteman ki kote bagay sa yo yo. Finalman, lè se pwogram ou an fè, oswa lè w ap fè debogaj li epi ou vle nan etap lwen nan anviwònman an gdb, li te ede yo konnen ki jan yo jwenn soti nan li. Ou ka tape q, oswa Kite, yo ka resevwa soti. Koulye a, anvan videyo jodi a Mwen pare yon pwogram buggy rele buggy1, ki mwen konpile ki sòti nan yon dosye li te ye tankou buggy1.c. Kòm ou ta ka atann, sa a pwogram se nan buggy reyalite. Yon bagay ale mal lè m 'eseye ak kouri li. Koulye a, malerezman, mwen inadvèrtans efase dosye buggy1.c mwen, se konsa yo nan lòd pou mwen pou m konnen ki sa k ap pase mal ak pwogram sa a, Mwen pral gen yo sèvi ak Gdb kalite je fèmen, ap navige nan pwogram sa a nan figi konnen ekzakteman ki sa k ap pase sa ki mal. Men, lè l sèvi avèk jis zouti yo nou te deja te aprann enfòmasyon sou, nou kapab bèl anpil figi konnen egzakteman sa li ye. Se konsa nou tèt sou nan CS50 IDE epi yo gen yon gade. OK, se konsa nou ap isit la nan mwen CS50 IDE anviwònman, epi mwen pral rale nan yon ti jan pou ou ka wè yon ti kras plis. Nan fennèt tèminal m 'yo, si m' lis sa ki nan direktè mwen ye kounye a ak ls, nou pral wè ke mwen gen yon koup nan dosye sous isit la, ki gen ladan nan te diskite anvan buggy1. Ki sa egzakteman ale sou lè Mwen eseye epi kouri buggy1. Oke kite a jwenn deyò. Mwen tape dot koupe, buggy, e mwen frape Antre nan. Segmentation fot. Sa a pa bon. Si ou sonje, se yon segmentation fòt tipikman rive lè nou jwenn aksè nan memwa ke nou pa ap pèmèt yo manyen. Nou te yon jan kanmenm te rive nan deyò nan limit yo nan sa ki pwogram nan, nan du, te ban nou. Se konsa, deja ki nan yon siy yo kenbe nan bwat zouti a jan nou kòmanse pwosesis la debogaj. Te Yon bagay ale yon ti kras mal isit la. Tout dwa, se konsa kite a kòmanse moute anviwònman an gdb ak wè si nou kapab konnen ki ki sa egzakteman pwoblèm nan se. Mwen pral klè ekran m 'yo, ak mwen pral tape gdb ankò, a antre nan anviwònman an gdb, ak non an nan pwogram nan ke mwen vle debug, buggy1. Nou jwenn yon mesaj ti kras, lekti senbòl soti nan buggy1, fè. Tout sa ki vle di se li rale ansanm tout nan kòd la, e kounye a, li a te chaje nan Gdb, epi li pare ale. Koulye a, sa m 'vle fè? Ou sonje sa a Premye etap tipikman se apre mwen se andedan nan anviwonman sa a? Èspere ke, ou di mete yon pwen repo, paske an reyalite se sa ki sa m 'vle yo fè. Koulye a, mwen pa gen nan kòd sous pou sa a nan devan m ', ki se pwobableman pa ka a pou sèvi tipik, nan chemen an. Ou pwobableman pral. Se konsa, sa a, se bon. Men, an konsideran ou pa fè sa, sa ki nan fonksyon nan yon sèl ke ou konnen egziste nan chak pwogram C selibatè? Pa gen pwoblèm ki jan gwo oswa ki jan konplike li se, sa a fonksyon definitivman egziste. Main, dwa? Se konsa, li pap resevwa tout lòt bagay, nou ka mete yon pwen repo nan prensipal la. Epi ankò, mwen te kapab jis tape kraze prensipal yo, olye pou yo b. Epi si w ap kirye, si ou tout tan tout tan tape soti yon lòd lontan ak Lè sa a reyalize ke ou tape bagay la sa ki mal, , epi ou vle debarase m nan tout jan mwen jis te fè, ou ka pran kontwòl U, ki pral efase tout bagay ak fè ou tounen nan konmansman an nan liy yo kurseur. Yon anpil pi vit pase jis kenbe la desann efase, oswa frape l 'yon fwa pakèt moun sou. Se konsa, nou pral mete yon pwen repo nan prensipal la. Ak jan ou ka wè, li di nou te mete yon pwen repo nan dosye buggy1.c, ak aparamman liy lan premye nan kòd nan prensipal se liy sèt. Yon fwa ankò, nou pa gen dosye a sous isit la, men mwen pral asime ke li a di m 'sa a verite a. Lè sa a,, mwen jis ap epi kouri pwogram nan, r. Koumanse pwogram nan. Tout dwa, se konsa mesaj sa a se yon ti kras skre. Men, fondamantalman sa ki nan vini isit la se li nan jis di m 'mwen te frape repo m' pwen, repo Nimewo pwen 1. Lè sa a,, ki liy nan kòd, pa gen okenn dosye sa yo oswa anyè. Rezon ki fè la sèlman ki Mwen wè ke mesaj se paske mwen inadvèrtans efase dosye buggy.c mwen. Si dosye buggy1.c mwen te egziste nan anyè aktyèl la, ke dwa liy gen ta aktyèlman di m 'sa liy lan nan kòd literalman li. Malerezman, mwen efase li. Nou ap pral fè yo kalite navige nan sa a yon ti kras plis je fèmen. OK, se konsa kite a wè, ki sa mwen vle fè isit la? Bon, mwen ta renmen konnen ki sa lokal varyab petèt yo disponib nan m '. Mwen te kòmanse pwogram m 'yo. Ann wè sa ki ta ka deja inisyalizèd pou nou. Mwen tape Info moun nan lokalite, pa gen moun nan lokalite. Tout dwa, se konsa ke pa fè sa ban m 'yon tòn enfòmasyon. Mwen te kapab eseye ak enprime soti yon varyab, men mwen pa konnen nenpòt ki non varyab. Mwen te kapab eseye yon tras tounen, men mwen andedan nan prensipal yo, Se konsa, mwen konnen mwen pa t 'fè yon lòt apèl fonksyon kounye a. Se konsa, sanble opsyon sèlman m ', se yo sèvi ak N oswa konsa epi yo kòmanse plonje nan. Mwen pral sèvi ak n. Se konsa, mwen tape n. Oh mwen bondye papa, sa k ap pase isit la. Pwogram resevwa siyal, SIGSEGV fòt segmentation, ak Lè sa a yon pakèt antye nan bagay. Mwen se deja akable. Oke, gen nan aktyèlman yon anpil yo dwe aprann isit la. Se konsa, sa sa a fè nou konnen? Ki sa sa di nou se, pwogram sa a se sou yo, men pa gen anyen ankò, seg fay. Apre sa, an patikilye, mwen pral rale nan menm pi lwen isit la, li a sou yo segman fòt sou yon bagay yo rele strkan. Koulye a, nou pa gen dwa te diskite sa a fonksyon anpil. Men, li is-- paske nou pa ap ale pale sou chak fonksyon ki egziste nan estanda a C library-- men yo ap tout ki disponib nou la a, sitou si ou pran yon gade nan reference.cs50.net. Apre sa, strkan se yon vrèman pwisan fonksyon ki egziste andedan a header nan string.h dosye, ki se yon header dosye ki se dedye a fonksyon ki travay ak ak manipile strings. Apre sa, an patikilye, ki sa strkan fè se li konpare valè yo nan de strings. Se konsa, mwen ta pral fòt segmentation sou yon rele nan strkan li sanble. Mwen frape n, ak nan reyalite mwen jwenn mesaj la, pwogram sispann ak SIGSEGV siyal segmentation fay. Se konsa, kounye Mwen aktyèlman te seg rproche, ak pwogram mwen an gen bèl pi efektivman bay moute. Sa a se nan fen pwogram nan. Li kraze, li te fè aksidan. Se konsa, pa t 'yon anpil, men mwen aktyèlman te fè aprann byen yon ti jan soti nan eksperyans sa a ti kras. -Kisa M 'te aprann? Oke, pwogram mwen aksidan bèl anpil imedyatman. Pwogram mwen aksidan sou yon rele nan strkan, men mwen pa gen okenn varyab lokal yo nan mwen pwogram la nan moman ke li aksidan. Se konsa, sa fisèl, oswa strings, te kapab mwen posib konpare. Si m 'pa gen okenn lokal varyab, ou ta ka suppose ke mwen en-gen petèt se yon plase varyab, ki ta ka vre. Men, jeneralman, li sanble tankou mwen konpare nan yon bagay ki pa egziste. Se konsa nou mennen ankèt sou ki yon ti kras pi lwen. Se konsa, mwen pral klè ekran m 'yo. Mwen pral kite fimen soti nan la Gdb anviwònman pou yon dezyèm fwa. Apre sa, mwen ap panse, OK, se konsa gen nan pa gen okenn varyab lokal yo nan pwogram m 'yo. M ap mande si petèt m ap sipoze yo pase nan yon fisèl kòm yon agiman liy lòd. Se konsa, kite yo jis teste sa a soti. Mwen pa te fè sa a anvan. Ann wè si petèt si mwen kouri pwogram sa a ak yon agiman liy lòd li fonksyone. Huh, san se pa fòt segmentation la. Li jis di m 'ke mwen kalkile li soti. Se konsa, petèt sa a, se ranje a isit la. Ak tout bon, si mwen tounen ladan l epi gade nan kòd la sous aktyèl pou buggy1.c, li sanble tankou si sa m ap fè a se M 'ap fè yon rele nan strkan san yo pa tcheke si wi ou non an reyalite argv [1] egziste. Sa a se aktyèlman nan kòd sous pou buggy1.c. Se konsa, sa mwen reyèlman bezwen fè isit la yo ranje pwogram m 'yo, an konsideran Mwen gen nan ranpli nan devan m ', se jis ajoute yon chèk fè asire w ke arg ki egal a 2. Se konsa, egzanp sa a, ankò, tankou mwen te di, se yon ti jan ti kras parvenus, dwa? W ap jeneralman yo pa ale nan aksidantèlman efase kòd sous ou ak Lè sa a gen eseye ak debug pwogram nan. Men, èspere ke, li te bay ou yon ilistrasyon a kalite ki nan bagay sa yo ke ou ka panse sou jan ou ap debogaj pwogram ou an. Ki sa ki nan eta a nan zafè isit la? Ki sa ki varyab pou mwen gen aksesib a m 'konsa? Ki kote egzakteman se pwogram mwen ekraze, sou sa ki liy, sou sa ki rele nan sa fonksyon? Ki kalite endikasyon ki ban m '? Epi sa a, egzakteman nan kalite attitude ke ou yo ta dwe trape nan lè w ap panse sou debogaj pwogram ou yo. Mwen se Doug Lloyd. Sa a se CS50.