[Powered by Google Translate] GDB, GNU Project Debugger, ay isang napakalakas na tool sa pag-debug para sa C,
kasama ng maraming iba pang mga wika.
Ay nagbibigay-daan sa iyo upang sundutin sa paligid sa loob ng iyong mga programa sa C habang sila execute,
at ito rin ay nagbibigay sa iyo ng pagkakataon upang makita ang eksaktong kung ano ang mangyayari
kapag nag-crash ng iyong programa.
Medyo nakakatawang, i-right?
GDB libreng software, at ito ay tumatakbo sa maraming popular na UNIX at
Windows-based operating system, kaya laganap tool.
>> Dapat mong malaman upang ibigin ito.
GDB pros ay may isang mas madali na oras tracking down na mga bug
kaysa sa mga na tuaranta sa pamamagitan ng paggamit ng guesses
at walang katapusan na bilang ng mga pahayag sa printout.
GDB ay isang command-line tool, na nangangahulugan na maaari kang makipag-ugnayan sa mga ito sa isang terminal
nagbigay ng mga utos sa pamamagitan ng keyboard sa halip ng pag-click sa pindutan gamit ang iyong mouse.
>> Upang simulan GDB, literal lamang uri gdb sa prompt at pindutin ang enter.
Makikita mo ang ilang mga linya na naka-print sa screen
ipinapakita sa iyo ang bersyon ng GDB na nagpapatakbo ka,
ang impormasyon ng copyright nito, at sa dulo makikita mo ang GDB prompt: (gdb).
Ito ay nagbibigay-daan sa alam mo na GDB ay handa na para sa command.
Sa puntong ito, ang pinaka-mahalagang bagay upang malaman kung paano gawin ay mag-quit.
Kabutihang palad, ito ay medyo simple.
Ang huminto utos ay ginagawa lamang na.
Bilang isang shortcut, maaari mo lamang gamitin ang q.
Bilang masaya bilang booting up GDB at pagkatapos ay agad na mag-quit,
sabihin ngayon makipag-usap tungkol sa paggamit ng GDB upang makatulong na i-debug ang isang programa.
>> Upang magsimula, Mayroon akong isang programa dito sa factorial.c
na nakakakuha ng isang int at sumusubok upang makalkula ang factorial.
Sa kaso hindi mo nakita factorials bago o hindi maalalang sa kanila,
Ang factorial ng ang bilang n katumbas sa produkto ng n - (n - 1), (n - 2), at iba pa -
hanggang maabot ang 1.
Samakatuwid, ang factorial ng 3 3 * 2 * 1, o 6,
at ang factorial ng 4 4 * 3 * 2 * 1, o 24.
Ang factorial ng zero ay isang kakaibang kaso, 1,
at ang factorials ng mga negatibong integer ay hindi tinukoy.
Pa Rin, ang isang bagay tungkol sa aking factorial programa ay funky.
Kapag nagpatakbo ako, mga Kopya kakaiba ang mga numero na may walang gawin sa factorials.
>> Kaya, maaari naming gamitin ang GDB upang makatulong na malaman kung ano ang nangyayari sa.
GDB ay nagpapatakbo ng sa mga maipapatupad na file,
na ang mga binary file na ginawa sa pamamagitan ng proseso ng compilation.
Iyon ay, hindi namin maaaring tumakbo GDB sa aming. C o. H pinagmulan file code tulad factorial.c.
Gusto naming patakbuhin ito lamang factorial sa halip.
Kung ang programa ay kinakailangan anumang command-line argumento,
ito ay kung saan namin tukuyin ang mga ito.
Sa kasong ito, factorial ay hindi nangangailangan ng anumang command-line argumento,
upang i-type lamang namin ang run o r para sa maikling.
>> Ito ay simulan ang factorial programa tumatakbo.
Kapag Humihinto ang programa tumatakbo, ako makakakuha ng aking GDB prompt pabalik.
Okay, sabihin subukang muli ang parehong bagay, factorial ng 4.
Karapatan lahat, nakikita namin na kami ay pagkuha ng parehong uri ng junk dito sa GDB.
Ngayon na ang programa ay natapos,
hindi namin maaaring pumunta sa at i-access ang anumang ng kanyang estado,
kaya kailangan nating simulan ang mga ito sa pagtakbo muli bago namin makita kung ano ang nangyayari.
Gayunpaman, kailangan namin ng isang paraan upang ihinto ito habang ito ay sa gitna ng mga run.
>> Upang gawin iyon, hindi namin gamitin kung ano ang tinatawag na breakpoint.
Breakpoints sabihin GDB i-pause ang programa sa isang partikular na function o linya ng source code
upang maaari naming suriin ang estado ng programa,
ang mga halaga ng variable, ang estado ng memorya at tulad, sa puntong iyon.
Dahil hindi ko talaga alam kung saan ang mga bagay ay pagpunta mali,
>> Gusto ko lang upang simulan ang pag-debug sa pinakadulo simula,
kanan kapag pangunahing nagsisimula.
Susubukan naming magtakda ng isang breakpoint sa simula ng pangunahing gamit ang utos ng pahinga.
Maaari din naming gamitin b pagpapaiksi pahinga.
Ngayon ay hayaan ang simulan ang programa muling tumakbo ang.
Narito ang namin sa simula ng pangunahing, tulad ng nagsasabi sa amin ng GDB.
Ang linya ng code na upang maisagawa ngunit hindi pa
ang printf linya.
Maaari naming sabihin sa GDB upang isakatuparan ang linya ng code at pumunta sa susunod na linya
ang susunod o n utos.
>> Karapatan lahat, na ngayon ay GDB Sinasabi sa amin na hindi namin sa linya ng GetInt.
Alam ko na tila tulad ng printf linya ay hindi tumatakbo
dahil hindi namin makita ang "Magpasok ng isang positibong integer" print out sa screen,
pero sa totoo ay tumakbo.
Kung ano ang nakikita namin ay ang operating system sugpuin ang anumang ng pagsulat sa screen
hanggang sa ganap na ito ay, na kung bakit ang pag-debug na may Printout
maaaring minsan tila hindi kapani-paniwala.
Pa rin, sabihin muli pumunta sa susunod na linya ng code at ipasok sa isang int.
Muli, sabihin uri 4.
Kaya ito mukhang kakaiba. Humihingi kami sa linya 12 ayon sa GDB,
ngunit sa susunod na linya na tungkol sa upang maisagawa lamang ng kulot suhay.
>> Iyon ay nangangahulugan lamang kami sa dulo ng isang loop, ang aming gawin habang loop sa katunayan,
at GDB ay nagsasabi sa amin na ang mga kondisyon ng pagwawakas, lalo wala na mas mababa sa zero,
ay execute ang susunod.
Kung ito man ay nakakakuha ng kaunti nakalilito,
maaari naming makuha ang source code GDB may listahan o utos ng l.
Ito ng mga Kopya ang source code
na nakasentro sa paligid ng linya na hindi namin kasalukuyang nasa.
Kung namin type muli ang listahan o l, makikita namin makita ang susunod na hanay ng mga linya i-print.
Maaari naming gawin ito hanggang sa aming pindutin ang dulo ng file.
>> Upang makabalik sa kung saan namin, maaari naming matustusan ang listahan na may isang numero ng linya,
sa kasong ito, ang linya 12.
Pa Rin, sabihin ilipat sa.
Ngayon kami sa 4 loop.
Sabihin tiyakin na ang aming num variable ay naglalaman ng 4.
Ginagawa namin ito sa print, o p, utos.
Kaya, GDB nagsasabi sa amin na num katunayan sa pag-iimbak ng 4, namin inaasahan.
Ang $ 1 GDB na mga Kopya out ay isang espesyal na variable GDB
na ngayon ang naka-set-imbak ang bilang 4 pati na rin.
Maaari mong huwag pansinin ang sa ngayon, ngunit ang mga GDB variable ay sa sobrang madaling gamiting
sa higit pang advanced na mga kaso kapag gusto mong isipin kung ano ang nagawa mo na sa nakaraan.
Pa rin, ang paglipat sa may susunod, makikita namin na sisimulan namin ang paglipat sa pamamagitan ng para sa loop.
Natin ang patuloy na pagdaan dito may n bit sa pamamagitan ng bit.
Sa halip na mag-type n bawat oras, maaari mo ring lamang pindutin ang enter.
Kapag pinindot ninyo ang magpasok nang walang pag-type ng anumang, GDB lamang uulit sa nakaraang utos.
Kaya ngayon kami pindutin ang printf tawag.
Mukhang katunayan namin na nawala sa pamamagitan ng aming para sa loop 4 na beses,
na kung ano ang gusto naming gawin upang multiply sa pamamagitan ng 1, 2, 3, at 4.
>> Lahat ay tila tulad ng ito ay gumagana,
maliban kung namin pindutin susunod muli namin makuha ang malaking bilang sa halip na 24.
Kung-print namin ang halaga ng factorial gamit p,
nakikita namin na factorial ay ang napakalaking numero sa.
Isang bagay ang tiyak pagpunta mali.
Sa puntong ito, bagaman, kami ay halos sa dulo ng programa,
at huli upang ayusin ang anumang bagay.
>> Gayunpaman, maaari naming i-restart ang program sa pamamagitan ng pag-type ng r muli at pagkatapos y upang kumpirmahin.
Ngayon ay hindi namin pabalik sa aming breakpoint sa simula ng pangunahing.
Alam namin na ang lahat ay mukhang fine sa pagbabasa sa n.
upang maaari naming tumalon magpatuloy sa n.
Bilang kahalili, maaari kaming magtakda ng isang bagong breakpoint matapos ang gawin habang loop
at tumalon doon. Natin gawin iyon.
Mukhang linya 14 ay pagkatapos ng loop.
Natin itakda ang isang breakpoint doon.
Ito ay mahusay na kasanayan upang tukuyin ang pangalan ng file sa command na ito ng breakpoint
dahil GDB maaaring makapag-lito kung nagtatrabaho ka na may maramihang mga file.
Upang ilipat magpatuloy na ito breakpoint, gagamitin namin magpatuloy o c utos.
>> Okay, dito ay namin sa para sa loop.
Hana 1 pang linya sa para sa loop,
at pagkatapos ay sisimulan namin ang mga variable ng pag-print upang makita kung ano ang nangyayari sa.
Tiyakin nating na i ay sa katunayan 1, tulad ng inaasahan.
Yup, na lahat ng magandang.
Ano ang tungkol sa factorial bagaman?
Whoa, na hindi magandang.
Mayroon kaming isang malaking bilang ng mga negatibong dito.
How'd na mangyayari?
Well, kung tiningnan namin pabalik sa code,
nakita namin na hindi namin nasimulan ito, kaya kami nakakuha ng basura doon.
Na ay talagang magtapon-off ang aming mga kalkulasyon.
>> Kabutihang palad, hindi namin na mag-iwan ng GDB upang ayusin ito.
Initialize namin ito dito at ayusin ang mga ito sa code sa ibang pagkakataon gamit ang naka-print na utos.
Initialize namin ito sa 1 dahil ang factorials ng zero at 1 parehong 1,
at kung initialize namin ito sa zero, at pagkatapos ay nais naming laging magtapos na may mga zero ng aming resulta.
Maaari mong itakda ang anumang mga variable na ito paraan, na kung saan ay sobrang madaling-gamiting.
Ngayon, sabihin patuloy ang aming programa.
Tiyakin nating ang lahat ng kung saan ito ay dapat na maging.
Num dapat na 4, dapat i 1, at factorial ay dapat na 1 masyadong.
Maaari naming shortcut ang prosesong ito at i-print ang lahat ng aming mga lokal na variable
na may super-kapaki-pakinabang na utos ng lokal impormasyon,
kung aling mga Kopya ang lahat ng aming in-saklaw lokal na variable.
Pa Rin, mukhang lahat ng bagay handa na upang patakbuhin.
>> Natin gawin ang isa pang go-sa paligid ng loop lang masiguradong.
Okay, lahat mukhang mahusay.
Ngayon ay maaari naming gamitin ang Magpatuloy command upang pumunta sa dulo.
Magaling! 4 factorial print 24 tulad ng inaasahan.
Ngayon ay maaari naming pumunta ayusin ito sa aming code.
Sa halip na mag-quit ng GDB, gagamitin namin ang isa pang terminal na tab upang gawin ito.
Pagpunta pabalik sa aming GDB tab, kailangan namin ngayon upang mag-recompile ang aming executable.
Isa ng pinakamahusay na mga bagay tungkol sa GDB ay na hindi mo kailangang mag-iwan ng GDB upang mapatakbo ang gumawa.
Kaya na hindi namin panatilihin ang pagpindot sa mga lumang breakpoints,
sabihin paganahin ang mga ito kasama ang, nahulaan mo, huwag paganahin ang command.
Hindi nito papaganahin ang lahat ng aming breakpoints.
Ngayon, maaari naming i-restart ang program na may r at tiyakin na ang lahat okay lang.
Mukhang ang lahat ng bagay handa na upang patakbuhin.
Factorial ng 4 print out 24, tulad ng naisip namin.
GDB ay isa ng ang pinaka-kapaki-pakinabang na tool na mayroon ka sa iyong toolbox.
>> May isang tonelada higit pang mga bagay na maaari mong gawin sa GDB,
malayo higit pa kaysa sa maaari mong gawin sa simpleng Printout.
Susunod na pagkakataon na ang iyong programa ay hindi ginagawa kung ano ang gusto mo,
subukan ang pagpapatakbo ng GDB upang malaman kung ano ang nangyayari sa loob.
Gamit ng kaunting kasanayan, magagawa mong mag-drill down sa iyong bug ay hindi sa anumang oras.
Ang pangalan ko ay Nate Hardison. Ito ay CS50.