DOUG LLOYD: zote haki GDB. Ni kitu gani hasa? Hivyo GDB, ambayo inasimamia kwa GNU Debugger, ni kweli kutisha chombo kwamba tunaweza kutumia kutusaidia Debug mipango yetu, au kujua ni wapi mambo ni kwenda vibaya katika mipango yetu. GDB ni kushangaza nguvu, lakini pato na mwingiliano na hayo inaweza kuwa ni kidogo kidogo cryptic. Ni kawaida mstari amri chombo, na inaweza kutupa mengi ya ujumbe saa wewe. Na inaweza aina ya vigumu Hazrat nini hasa kinaendelea. Kwa bahati nzuri, tumekuwa kuchukuliwa hatua kurekebisha tatizo hili kwa ajili yenu kama wewe kazi kwa njia CS50. Kama wewe si kutumia graphical HatiJava, ambayo mwenzangu Dan Armandarse amesema kabisa kidogo kuhusu katika video ambayo lazima juu hapa sasa hivi, unaweza haja kutumia mstari amri hizi zana kufanya kazi na GDB. Kama wewe ni kufanya kazi katika CS50 IDE, huna haja ya kufanya hivyo. Lakini kama wewe si kufanya kazi katika CS50 IDE, labda kwa kutumia toleo la ya Appliance CS50, au nyingine Linux uendeshaji mfumo na GDB imewekwa juu yake, unaweza haja ya kutumia hizi amri line zana. Na kwa kuwa waweza kuwa kufanya hivyo, ni muhimu tu kuelewa jinsi GDB kazi kutoka mstari amri. Lakini tena, kama wewe ni kutumia CS50 IDE, wewe Unaweza kutumia HatiJava graphical ambayo imejengwa katika IDE. Hivyo kufanya mambo kusonga kwa GDB, kuanza debugging mchakato wa fulani mpango, wote unahitaji kufanya ni aina GDB ikifuatiwa kwa jina mpango. Hivyo kwa mfano, kama mpango wako ni hodi, ungekuwa aina GDB hodi. Wakati wewe kufanya hivyo, wewe ni kwenda kuvuta up mazingira GDB. Haraka yako itabadilika, na badala ya kuwa kile kawaida ni pale unapoandika mambo kwa amri line-- ls, cd-- wote wa kawaida yako Linux amri, haraka yako kubadilika na, pengine, kitu kama mabano GDB mabano. Hiyo ni GDB yako mpya haraka, kwa sababu uko ndani ya mazingira GDB. Mara baada ya ndani ya mazingira ambayo, kuna amri mbili kuu kwamba pengine utasikia kutumia ili zifuatazo. Kwanza ni b, ambayo ni mfupi kwa ajili ya mapumziko. Na baada ya wewe aina b, kwa kawaida wewe aina jina la kazi, au kama kutokea kwa kujua kuzunguka kile mstari idadi mpango wako ni mapya kuwa na tabia weird kidogo, unaweza aina line idadi huko pia. Nini b, au mapumziko, anafanya ni inaruhusu programu yako kuendesha hadi hatua fulani, yaani, jina la kazi kwamba bayana au mstari idadi hiyo bayana. Na katika hatua hiyo, ni kufungia utekelezaji. Hili ni jambo zuri, kwa sababu mara moja utekelezaji imekuwa waliohifadhiwa, unaweza kuanza polepole sana hatua kupitia mpango wako. Kwa kawaida, kama tumekuwa kukimbia mipango yako, wao ni pretty mfupi. Kwa kawaida, aina dot slash chochote jina la mpango wako ni, hit Enter, na kabla unaweza blink, yako Mpango tayari kumaliza. Ni kweli muda mwingi kujaribu na kufikiri nini kinaendelea vibaya. Hivyo ni kweli kuwa na uwezo wa kupunguza kasi ya mambo chini kwa kuweka hatua ya mapumziko na b, na kisha wanazidi katika. Kisha mara moja umefanya kuweka mapumziko yako hatua, unaweza kuendesha programu. Na kama una hoja mstari amri, bayana yao hapa, si wakati aina GDB mpango jina lako. Wewe taja zote mstari amri hoja kwa kuchukua r, au kukimbia, na kisha amri yo hoja mstari unahitaji ndani ya mpango wako. Kuna idadi ya mwingine kweli amri muhimu na manufaa ndani ya mazingira Pato la Taifa. Hivyo basi mimi tu haraka kwenda juu baadhi yao. Kwanza ni n, ambayo ni fupi kwa ajili ya pili, na unaweza aina ijayo badala ya n, wote ingekuwa kazi. Na ni tu shorthand. Na kama umefanya pengine tayari wamezipata kutumika, kuwa na uwezo wa aina ya mambo mfupi kwa ujumla ni bora zaidi. Na nini itakuwa kufanya ni kutakuwa na hatua mbele moja kuzuia wa kanuni. Hivyo itabidi kusonga mbele mpaka kazi ya wito. Na kisha badala ya mbizi katika kazi hiyo na kwenda njia zote za kazi ambayo kanuni, itakuwa tu kuwa na kazi. Kazi wataitwa. Itakuwa kufanya lolote kazi yake ni. Itakuwa kurudi thamani ya kazi ambayo kuitwa hivyo. Na kisha utasikia hoja juu ya mstari wa pili wa kwamba wito kazi. Kama unataka hatua ndani ya kazi, badala ya kuwa tu ni kutekeleza, hasa kama unadhani kwamba tatizo ili uongo ndani ya kazi kwamba, unaweza, bila shaka, kuweka mapumziko uhakika ndani ya kazi hiyo. Au kama wewe ni tayari mbio, unaweza kutumia s hatua mbele moja mstari wa kanuni. Hivyo hii itakuwa hatua katika na kupiga mbizi katika kazi, badala ya tu na kutekeleza na kuendelea juu ya kazi katika kwamba uko kwa debugging. Kama wewe milele unataka kujua thamani ya kutofautiana, unaweza aina p, au Magazeti, na kisha jina kutofautiana. Na kwamba itakuwa magazeti nje kwenu, ndani ya mazingira GDB, jina la kutofautiana, kwamba you-- udhuru ME thamani ya kutofautiana kwamba umefanya jina. Kama unataka kujua maadili ya kila ndani kutofautiana kupatikana kutoka ambapo wewe sasa ni katika yako mpango, unaweza aina ya maelezo wazawa. Ni mengi kwa kasi zaidi kuliko kuandika p na kisha chochote, orodha nje wote wa vigezo kwamba unajua kuwepo. Unaweza aina ya maelezo wenyeji, na magazeti nje kila kitu kwa ajili yenu. Next up ni bt, ambayo ni mfupi kwa nyuma kuwaeleza. Sasa, kwa ujumla, mapema hasa katika CS50, utakuwa si kweli kuwa tukio kutumia bt, au Nyuma kuwaeleza, kwa sababu wewe ni kutokuwa na kazi kwamba wito kazi nyingine. Unaweza kuwa na kuu wito a kazi, lakini hiyo ni pengine hilo. Huna kazi ambayo wengine wito kazi nyingine, ambayo wito kazi nyingine, na kadhalika. Lakini kama mipango yako kupata zaidi tata, na hasa unapoanza kufanya kazi na kujirudia, nyuma kuwaeleza inaweza kuwa njia muhimu kweli kweli basi wewe aina ya kupata baadhi ya mazingira kwa ambapo Mimi ni katika mpango wangu. Hivyo kusema umefanya imeandikwa kanuni yako, na unajua kwamba kuu wito kazi f, ambayo inatoa wito kazi g, ambayo inatoa wito kazi h. Hivyo tuna tabaka kadhaa ya nesting kinachoendelea hapa. Kama uko ndani ya GDB mazingira yako, na unajua ndani ya yako ya h, lakini kusahau kuhusu nini got wewe ambapo are-- unaweza aina bt, au nyuma kuwaeleza, na itakuwa magazeti nje h, g, f kuu, pamoja na baadhi ya taarifa nyingine, ambayo anatoa kidokezo kwamba, OK kuu kuitwa f, f aitwaye g, g aitwaye h, na hapo ndipo mimi sasa niko katika mpango wangu. Hivyo inaweza kuwa muhimu kweli kweli, hasa kama cryptic-ness ya GDB inakuwa kidogo mno, kwa kujua hasa ambapo mambo yalivyo. Hatimaye, wakati mpango wako ni kosa, au wakati wewe ni kosa debugging ni na unataka hatua mbali kutokana na mazingira GDB, inasaidia kujua jinsi ya kupata nje yake. Unaweza aina q, au kuacha, kupata nje. Sasa, kabla ya video ya leo Mimi tayari mpango buggy aitwaye buggy1, ambayo mimi ulioandaliwa kutoka faili inayojulikana kama buggy1.c. Kama unaweza kutarajia, hii mpango huo ni katika buggy ukweli. Kitu fulani kitaenda vibaya wakati mimi kujaribu na kukimbia nayo. Sasa, kwa bahati mbaya, mimi inadvertently kufutwa buggy1.c faili yangu, hivyo ili kwa mimi kufikiri nini kinaendelea vibaya na mpango huu, Mimi nina kwenda kuwa na matumizi ya GDB aina ya upofu, kujaribu navigate kupitia mpango huu kwa kufikiri hasa nini kinaendelea vibaya. Lakini kwa kutumia zana tu tumekuwa tayari kujifunza kuhusu, tunaweza takwimu pretty much nje ni nini hasa. Basi hebu kichwa juu ya CS50 IDE na kuwa na kuangalia. OK, hivyo tuko hapa katika wangu CS50 IDE mazingira, na mimi itabidi kuvuta kidogo hivyo unaweza kuona kidogo zaidi. Katika terminal dirisha yangu, kama mimi orodha yaliyomo ya mkurugenzi wangu wa sasa na ls, tutaweza kuona kwamba mimi kuwa wanandoa wa files chanzo hapa, ikiwa ni pamoja na awali kujadiliwa buggy1. Ni nini kinachoendelea wakati Mimi kujaribu na kukimbia buggy1. Naam hebu kujua. Mimi aina dot slash, Buggy, na mimi hit Enter. Mkato makosa. Hiyo si nzuri. Kama unakumbuka, segmentation kosa kawaida hutokea wakati sisi kupata kumbukumbu kwamba sisi ni haruhusiwi kugusa. Tumekuwa namna fulani kufikiwa nje ya mipaka ya nini mpango, compiler, ametupa. Na hivyo tayari hiyo ni fununu kuweka katika sanduku la vifaa kama sisi kuanza mchakato debugging. Kitu amekwenda vibaya kidogo hapa. Haki wote, hivyo hebu kuanza up mazingira GDB na kuona kama tunaweza kufikiri nini hasa tatizo ni. Mimi nina kwenda kwa wazi screen yangu, na mimi nina kwenda aina GDB tena, kwa iingie katika mazingira GDB, na jina la mpango kuwa nataka Debug, buggy1. Sisi kupata ujumbe kidogo, kusoma alama kutoka buggy1, kosa. Wote kwamba maana ni vunjwa pamoja wote wa kanuni, na sasa imekuwa ni kubeba katika GDB, na ni tayari kwenda. Sasa, je, nataka kufanya? Je, unakumbuka kile Hatua ya kwanza ni kawaida baada ya mimi nina ndani ya mazingira haya? Hopefully, wewe alisema kuweka hatua ya mapumziko, kwa sababu kutokana na ukweli kuwa ni nini nataka kufanya. Sasa, sina chanzo kanuni kwa hii mbele yangu, ambayo pengine ni si kawaida na matumizi ya kesi, kwa njia. Pengine mapenzi. Hivyo hiyo ni nzuri. Lakini kuchukua huna, nini kazi moja kwamba unajua ipo katika kila moja C mpango? Bila kujali jinsi kubwa au jinsi ngumu ni, kazi hii dhahiri lipo. Kuu, sawa? Hivyo kushindwa yote, tunaweza kuweka hatua ya mapumziko katika kuu. Na tena, mimi naweza aina tu kuvunja kuu, badala ya b. Na kama wewe ni curious, kama wewe milele aina nje amri kwa muda mrefu na kisha kutambua kwamba kitu kibaya typed, na unataka kujikwamua ya yote kama mimi tu alifanya, unaweza kuchukua Kudhibiti U, ambayo itakuwa kufuta kila kitu na kuleta nyuma mwanzo wa mistari mshale. Mengi zaidi kuliko tu kushikilia chini kufuta, au kupiga yake mara rundo zaidi. Hivyo tutaweza kuweka hatua ya mapumziko katika kuu. Na kama unaweza kuona, inasema tumekuwa kuweka hatua ya mapumziko katika faili buggy1.c, na inaonekana mstari wa kwanza ya kanuni za kuu ni mstari saba. Tena, hatuna chanzo faili hapa, lakini mimi itabidi kudhani kuwa ni kuniambia ukweli. Na kisha, mimi tu kujaribu na kuendesha programu, r. Kuanzia mpango. Haki wote, hivyo ujumbe huu ni kidogo cryptic. Lakini kimsingi nini kinachotokea hapa ni ni tu kuniambia nimekuwa kugonga mapumziko yangu uhakika, hatua ya mapumziko namba 1. Na kisha, kuwa mstari wa kanuni, hakuna vile faili au directory. Sababu tu kwamba Mimi nina kuona ujumbe kwamba ni kwa sababu mimi inadvertently kufutwa faili yangu buggy.c. Kama faili yangu buggy1.c kuwepo katika saraka ya sasa, kuwa mstari wa kulia ingekuwa kuna kweli kuniambia nini mstari wa kanuni halisi anasoma. Kwa bahati mbaya, mimi ilifutwa yake. Tunakwenda kuwa na aina ya navigate kwa njia hii kidogo zaidi upofu. Sawa, hivyo hebu angalia, nini Je, mimi wanataka kufanya hapa? Naam, napenda kujua nini ndani vigezo labda zinapatikana kwangu. Nimeanza mpango wangu. Hebu kuona nini inaweza kuwa Tayari initialized kwa ajili yetu. Mimi aina Info wenyeji, hakuna wazawa. Haki wote, hivyo kwamba hana nipe tani ya habari. Mimi naweza kujaribu na magazeti nje kutofautiana, lakini sijui majina yoyote kutofautiana. Mimi naweza kujaribu nyuma kuwaeleza, lakini nina ndani ya kuu, hivyo najua mimi si alifanya mwingine wito kazi hivi sasa. Hivyo inaonekana kama chaguzi yangu tu ni kutumia n au hivyo na kuanza kupiga mbizi katika. Mimi nina kwenda kutumia n. Hivyo mimi aina n. Oh gosh wangu, ni nini kinaendelea hapa. Programu ya kupokea ishara, SIGSEGV segmentation kosa, na kisha rundo zima ya mambo. Tayari nina kuzidiwa. Naam, kuna kweli mengi ya kujifunza hapa. Basi nini hii kutuambia? Nini inatuambia ni, mpango huu ni karibu, lakini ina bado, seg kosa. Na hasa, mimi nina kwenda kwa kuvuta hata zaidi hapa, ni kuhusu kosa seg kuhusu kitu kinachoitwa strcmp. Sasa, hatuwezi kujadili kazi hii kwa kina. Lakini is-- kwa sababu sisi siyo kwenda kuzungumzia kila kazi ambayo ipo katika kiwango cha maktaba C lakini wao ni wote inapatikana na wewe, hasa kama wewe kuchukua kuangalia reference.cs50.net. Na strcmp ni kweli nguvu kazi ambayo ipo ndani ya ya kichwa string.h file, ambayo ni header faili kwamba ni kujitolea na kazi kwamba kazi kwa na kuendesha masharti. Na hasa, nini strcmp gani ni inalinganishwa maadili ya masharti mawili. Hivyo mimi nina kuhusu segmentation kosa juu ya wito kwa strcmp inaonekana. Mimi kugonga n, na kwa kweli mimi kupata ujumbe, Mpango kuachishwa kwa ishara SIGSEGV segmentation kosa. Hivyo sasa Mimi kwa kweli kuwa seg alipinga, na mpango wangu ana pretty mengi kwa ufanisi wamekata. Hii ni mwisho wa mpango. Ni kuvunja chini, ni kugonga. Hivyo haikuwa mengi, lakini mimi kwa kweli kujifunza kidogo kabisa kutokana na uzoefu huu kidogo. Nini mimi kujifunza? Naam, mpango wangu shambulio pretty much mara moja. Mpango wangu shambulio juu ya a kuwaita kwa strcmp, lakini mimi hawana vigezo mitaa yoyote katika yangu Mpango wakati huo ni shambulio. Kwa hiyo kile kamba, au masharti, nitaweza uwezekano kuwa kulinganisha. Kama sina lolote ndani vigezo, waweza kusema kuwa mimi have-- huko labda ni variable kimataifa, ambayo inaweza kuwa kweli. Lakini kwa ujumla, inaonekana kama mimi nina kulinganisha kitu ambacho haipo. Basi hebu kuchunguza kuwa kidogo zaidi. Hivyo nina kwenda kwa wazi screen yangu. Mimi nina kwenda kuacha nje ya GDB mazingira kwa ajili ya pili. Na mimi nina kufikiri, OK, hivyo kuna hakuna vigezo mitaa katika mpango wangu. Nashangaa kama labda natakiwa kupita katika kamba kama hoja mstari amri. Basi hebu tu mtihani huu nje. Mimi sina kosa hili kabla. Hebu angalia kama labda kama mimi kukimbia mpango huu na mstari amri hoja ni kazi. Ha, hakuna kosa segmentation huko. Ni tu aliniambia kuwa mimi figured nje. Hivyo labda hiyo ni kurekebisha hapa. Na hakika, kama mimi kwenda nyuma na kuangalia halisi chanzo kanuni kwa buggy1.c, inaonekana kana kwamba nini mimi kufanya ni Mimi nina kufanya wito kwa strcmp bila kuangalia kama kweli argv [1] lipo. Hii ni kweli chanzo kanuni kwa buggy1.c. Hivyo kile kwa kweli wanahitaji kufanya hapa kurekebisha mpango wangu, kuchukua nina faili mbele yangu, ni kwa kuongeza tu kuangalia kufanya kuhakikisha kwamba argc ni sawa na 2. Hivyo mfano huu, tena, kama nilivyosema, ni kidogo contrived, sawa? Wewe ni kwa ujumla si kwenda ajali kufuta chanzo kanuni yako na kisha kuwa na kujaribu na Debug mpango. Lakini hopefully, lilitoa wewe mfano ya aina ya mambo ambayo ungeweza kufikiria kama wewe ni debugging programu yako. Nini hali ya mambo hapa ni? Nini vigezo gani mimi kuwa kupatikana kwa mimi? Ambapo hasa ni mpango wangu crashing, juu ya nini line, juu ya nini wito kwa nini kazi? Ni aina gani ya dalili gani kwamba nipe? Na hii ndiyo hasa aina ya mawazo kwamba wewe lazima kuingia katika wakati uko kufikiria juu debugging programu yako. Mimi nina Doug Lloyd. Hii ni CS50.