[Powered by Google Translate] ГДБ, Пројекат ГНУ Дебуггер је моћна алатка за отклањање грешака Ц, заједно са многим другим језицима. Она вам омогућава да џаку око унутар ваших Ц програмима, док они извршавају, и такође вам даје прилику да виде шта се дешава када ваш програм сруши. То је прилично диван, зар не? ГДБ је слободан софтвер, и то ради на многим популарним УНИКС и Виндовс базирани оперативни системи, тако да је веома распрострањен инструмент. Требало би да науче да воле. ГДБ професионалци имају много лакше проналажење грешке од оних који су збрка кроз коришћење нагађања и бесконачне количине одштампаног извештаја. ГДБ је алатка командне линије, што значи да може да комуницира са њим у терминалу издавања команде преко тастатуре уместо кликом дугмад помоћу миша. Да бисте покренули ГДБ, буквално само укуцајте гдб на брз и хит ентер. Видећете неке линије штампају на екрану показујући верзију ГДБ да сте трчање, његова ауторска права информација, и на крају ћете видети ГДБ промпт: (гдб). Ово вам омогућава да знате да ГДБ је спреман за команде. У овом тренутку, најважнија ствар коју треба да знате како да то урадите је отказ. Срећом, ово је прилично једноставан. Тхе отказ команда ради управо то. Као пречицу, можете једноставно користити к превише. Забавно као бутовања ГДБ и онда одмах одвикавање је, хајде сад да причам о коришћењу ГДБ да помогне отклањање грешака програма. За почетак, имам програм овде у фацториал.ц који добија инт и покушава да израчуна свој факторијел. У случају да нисте видели факторијела пре или их не сећам, Факторијел броја н је једнак производу н - (н - 1), (н - 2), и тако даље - док си ударио 1. Дакле, факторијел 3 је 3 * 2 * 1 или 6, и факторијел 4 је 4 * 3 * 2 * 1 или 24. Факторијел нуле чудно случај, то је 1, и факторијела негативних бројева нису дефинисани. У сваком случају, нешто о мом факторске програму је фанки. Када сам га покренете, он исписује чудне бројеве који немају никакве везе са факторијела. Дакле, можемо да користимо гдб да помогне да схватим шта се дешава. ГДБ ради на извршним датотекама, који су бинарне датотеке које производи компилацијски процеса. То јест, не можемо покренути ГДБ на нашем Ц. Или х соурце цоде фајлова као фацториал.ц.. Желимо да га покренете на само факторијел уместо. Ако програм тражи никакве аргументе командне линије, ово је место где ћемо их навести. У овом случају, факторијел не захтева никакве аргументе командне линије, тако да смо само укуцајте серију или Р за кратко. Ово ће почети факторијел задатом програму. Када је програм престаје да тече, ја ћу добити мој ГДБ затражити назад. Ок, хајде да покушамо поново исту ствар, факторијел 4. У реду, видимо да смо све исте врсте смећа овде у ГДБ. Сада када програм заврши, не можемо ићи и приступ било његове државе, па ћемо морати да почне поново покренут пре него што можемо да видимо шта се дешава. Међутим, потребан нам је начин да га заустави док је у сред своје стазе. Да бисте то урадили, ми користимо оно што се зове тачку прекида. Тачке прекида реци ГДБ да паузирате програм на одређену функцију или изворног кода линије тако да можемо испитати стање програма, вредности променљивих, стање меморије и тако, у том тренутку. Пошто ја не знам где ствари иду лоше, Ја само желим да почне отклањање грешака одмах на самом почетку, у праву када главни почиње. Ми ћемо поставити тачку прекида на почетку главни помоћу бреак команду. Такође можете да користите б да скратим паузу. Сада кренимо програм који ради поново. Овде смо на почетку главни, баш као ГДБ нам каже. Линија кода који је требало да изврши, али још није је принтф линија. Можемо рећи ГДБ да изврши ову линију кода и идите на следећу линију са следећом или н командом. У реду, сада ГДБ нам говори да смо на ГетИнт линији. Знам да изгледа као да је иф линија није рун јер ми не видимо "Унесите позитиван цео број" отисак на екрану, али то је заправо није трчи. Оно што ми видимо је оперативни систем сузбијања било писања на екрану док се апсолутно мора, што због дебаговање са исписима понекад може изгледати непоуздани. У сваком случају, идемо опет до следеће линије кода и унети у инт. Опет, идемо тип 4. Дакле, ово изгледа чудно. Ми смо на линији 12 према ГДБ, али следећа линија која ће да изврши само увијена браће. То само значи да смо на крају петље, наши раде док петља у ствари, и ГДБ нам говори да је услов прекида, односно нико мањи од нуле, ће извршити следећи. Ако се ово икада добије мало збуњујуће, можемо повући кода у ГДБ са листе или л команде. Ова штампа изворни код који је центриран око линије која се тренутно налазите. Ако смо укуцавате листу или л, видећемо следећи скуп линија одштампати. Можемо урадити све док не удари крај датотеке. Да се ​​вратимо тамо где смо били, можемо снабдевање листу са бројем реда, у овом случају, линија 12. У сваком случају, идемо даље. Сада смо на 4 петље. Хајде да проверимо да ли је наша променљива цилиндра садржи 4. Ми смо то урадили са штампаним или п команде. Дакле, ГДБ нам говори да број заиста складиштење 4, као што смо очекивали. $ 1 да ГДБ штампа је посебна ГДБ променљива који је сада постављен за складиштење 4 Број као добро. Можете да игноришете ово за сада, али ови ГДБ променљиве долазе у супер згодна у више напредним случајевима када желите да се сећате шта сте урадили у прошлости. У сваком случају, идемо даље са следећег, видимо да смо кренуло путем за петљу. Хајде да наставимо овуда са н бита по мало. Уместо куцању н сваки пут, можете само притисните ентер. Када кликнете уђу без куцања ништа, само ГДБ понавља претходну команду. Дакле, сада смо погодили принтф позив. Изгледа да смо заиста прошли наше фор петљи 4 пута, што је оно што ми желимо да урадимо у циљу помножите са 1, 2, 3, и 4. Све изгледа као да ради, осим када смо погодили следећа опет смо добили овај огроман број уместо 24. Ако се штампати вредност факторске помоћу п, видимо да факторијел нема ту велике број у њему. Нешто се дефинитивно дешава у праву. У овом тренутку, међутим, ми смо скоро на крају програма, и то је сувише касно да поправи било шта. Међутим, можемо поново покренути програм куцањем р поново и онда И да бисте потврдили. Сада смо поново на нашем Бреакпоинт на почетку главног. Знамо да све изгледа у реду са читањем у н. тако да можемо напред скок са н. Алтернативно, можемо поставити нову тачку прекида после радити док петља и скок тамо. Хајде да то урадимо. Изгледа као линија 14 долази одмах после петље. Хајде да ту тачку прекида. То је добра пракса да наведете име датотеке у овом Бреакпоинт команди јер ГДБ може збунити ако радите са више фајлова. За напредовати овог Бреакпоинт, ми ћемо користити наставити или ц команду. Ок, овде смо на за петљу. Идемо 1 нова линија у фор петљи, а онда ћемо почети променљиве штампања да видим шта се дешава. Хајде да проверимо да ли да се и заиста је 1, као што је очекивано. Да, то је добро. Шта факторијел иако? Хеј, то није добро. Ми смо овде велики негативан број. Како се то догодило? Па, ако погледамо назад у коду, видимо да никада није иницијализован, тако да смо управо добили ђубре тамо. То ће дефинитивно избацити нашу рачуницу. Срећом, не морамо да напусте ГДБ да поправи ово. Можемо да покрене овде и поправити га у коду касније помоћу штампача команду. Ми ћемо га покрене до 1. пошто факторијела нуле и 1 су и 1, а ако га покрене на нулу, а онда ћемо се увек би завршити с нулом као наш резултат. Можете да поставите било коју променљиву на овај начин, што је супер згодна. Сада, хајде да наставимо наш програм. Хајде да проверимо да ли је све оно где треба да буде. Број треба да буде 4, и требало би да буде 1, а факторијел треба да буде 1 сувише. Можемо пречица овај процес и штампање свих наших локалних променљивих са супер корисних мештана командним инфо, који исписује све наше анкетираних локалних променљивих. У сваком случају, изгледа да је све у реду. Хајде да урадимо још један го-око од петље само да се уверите. Ок, све изгледа сјајно. Сада можемо да користимо команду наставити да иде до краја. Свеет! 4 факторијел одштампан 24 као што се очекивало. Сада можемо да идемо ово поправити у нашем коду. Уместо отказ из ГДБ, ми ћемо користити другу картицу терминала да се то уради. Враћајући се нашем ГДБ картици, сада морамо да компајлирате нашу извршну. Једна од најбољих ствари у вези ГДБ је да не морате да оставите ГДБ да покрене направити. Тако да ми не држе удара старе тачке прекида, хајде да их онемогући у, погодили сте, искључите команду. То ће онемогућити све наше тачке прекида. Сада можемо поново покренути програм са р и уверите се да је све у реду. Изгледа као да је све у реду. Факторијел од 4 отисака од 24, баш као што смо мислили. ГДБ је један од најкориснијих алата сте добили у кутији са алаткама. Постоји тона више ствари које можете да урадите са ГДБ, далеко више него што можете да урадите са једноставним исписима. Следећи пут ваш програм не ради оно што желите, покушајте да покренете ГДБ да схватим шта се дешава унутра. Уз мало праксе, моћи ћете да бушите доле десно на грешке у кратком времену. Моје име је Нејт Хардисон. Ово је ЦС50.