[Powered by Google Translate] GDB, проектот ГНУ дебагерот, е моќен дебагирање алатка за C, заедно со многу други јазици. Тоа ви овозможува да ѕиркаат наоколу во вашиот C програми, додека тие се извршуваат, а исто така ви дава можност да се види точно она што се случува кога вашата програма падне. Тоа е прилично Вешта, нели? GDB е слободен софтвер, и тоа работи на многу популарни UNIX и Windows-базирани оперативни системи, така што е многу широко распространето алатка. Треба да научиш да го сакаш. GDB добрите имаат многу полесно пронаоѓање на грешки од оние кои вечната преку користење на нагаѓања и бесконечни суми на отпечатоците изјави. GDB е командната линија алатка, што значи дека може да комуницирате со него во терминал издавање на команди преку тастатура, наместо кликнување копчиња со вашиот глушец. Да ја стартувате GDB, вие буквално само тип gdb во конзолата и притиснете ентер. Ќе видите некои линии отпечатени на екранот ви покажува верзија на GDB дека сте водење, нејзините информации за авторските права, и на крајот ќе видите GDB прашува: (gdb). Ова ви овозможува да знаете дека GDB е подготвена за команди. Во овој момент, најважното нешто да знаете како да го направите е да престанам. За среќа, ова е прилично едноставна. На престанам команда не само тоа. Како кратенка, можете да го користите само q премногу. Како забава, како подигнување до GDB а потоа брзо напуштање е, ајде сега се зборува за користење GDB да им помогне на дебагирање програма. За почеток, имам програмата тука во factorial.c што добива int и се обидува да пресмета неговата факториел. Во случај да не сте виделе factorials пред или не се сеќаваат на нив, На факториел на бројот n е еднаков на производот од n - (n - 1), (n - 2), и така натаму - додека не го притиснете 1. Затоа, факториел од 3 е 3 * 2 * 1 или 6, и факториел од 4 е 4 * 3 * 2 * 1 или 24. Факториел од нула е непарен случај, тоа е 1, и factorials на негативни цели броеви не се дефинирани. Како и да е, нешто за мојот факториел програма е фанки. Кога ќе се стартува, тоа отпечатоци од чудни бројки кои немаат ништо заедничко со factorials. Значи, можеме да го користиме GDB да ви помогне да дознаам што се случува. GDB работи на извршна датотека, кои се бинарни датотеки произведени од страна на компилација процес. Тоа е, ние не може да работи GDB на нашата. C или. Ж изворниот код на датотеки како factorial.c. Ние сакаме да се пушта и на само факториел наместо тоа. Ако програмата бара било командната линија аргументи, ова е местото каде што ние би ги специфицирате. Во овој случај, факториел не бара никакви командната линија аргументи, па ние само напишете рок или r за кратко. Ова ќе започне на факториел програмата за трчање. Кога на програмата ќе престане да работи, јас ќе добијам мојот GDB поттикне назад. Океј, ајде да се обидеме истото повторно, факториел од 4. Добро, ќе видиме дека ние сме добивање на ист вид на ѓубре тука во gdb. Сега дека програмата ќе заврши, не можеме да одиме и да пристапите на некој од својата држава, па ние ќе треба да почнат да го работи повторно пред можеме да видиме што се случува. Сепак, ние треба начин да го запре, а тоа е во средината на своите работи. Да го стори тоа, ние ги користиме она што се нарекува точка на прекин. Поминувања кажам GDB за да го паузирате програмата во одредена функција или изворен код линија така што можеме да го испита состојбата на програмата, на вредностите на променливите, состојбата на меморијата и такви, во тој момент. Бидејќи јас навистина не знам каде се одвиваат работите во ред, Јас само сакам да започнам дебагирачка правото на самиот почеток, право кога главната почнува. Ние ќе се постави точки на прекин на почетокот на главната користење на пауза команда. Ние, исто така може да се користи b за да abbreviate пауза. Сега ајде да ја стартувате програмата водење повторно. Тука сме на почетокот на главната, исто како GDB ни кажува. На линија на кодот кој е за да се изврши, но сеуште не е е printf линија. Може да се каже GDB да ја извршите оваа линија код и да одат во следната линија со следниот или n команда. Добро, сега GDB ни кажува дека ние сме на GetInt линија. Знам дека изгледа како printf линија не работи бидејќи ние не ги гледаме "Внесете позитивен цел број" печатење на екран, но тоа, всушност работи. Она што се забележува е оперативен систем потисне пишување ништо на екранот додека не се апсолутно мора, кој зошто дебагирање со исписи понекогаш може да изгледа несигурни. Како и да е, ајде повторно да одат во следната линија код и внесете во int. Повторно, ајде тип 4. Па ова изгледа чудно. Ние сме на линија 12, според GDB, но на следната линија тоа е за да се изврши е само кадрава голема заграда. Тоа само значи дека сме на крајот на еден циклус, нашите се направи додека јамка всушност, и GDB ни кажува дека раскинувањето состојба, имено ниту помалку од нула, ќе се изврши следниот. Ако ова некогаш добива малку збунувачки, можеме да се повлече до изворниот код во GDB со листата или l командата. Ова отпечатоци од изворниот код тоа е центриран околу линијата што моментално се наоѓате. Ако ние напишете листа или l, повторно, ќе видиме следниот сет на линии испечатите. Ние можеме да го направите тоа додека не го погоди крајот на датотеката. Да се ​​вратам на тоа каде бевме, можеме да снабдување листа со линијата број, во овој случај, линија 12. Како и да е, ајде да се движат натаму. Сега сме на 4 јамка. Да се ​​осигураме дека нашите ЕЕЗ променлива содржи 4. Ние го правиме ова со печати или p, команда. Значи, GDB ни кажува дека ЕЕЗ е навистина складирање 4, како што се очекуваше. $ 1 дека GDB отпечатоци од е посебен GDB променлива кој е сега во собата за чување на број 4, како и. Можете да го игнорирате, за сега, но овие GDB променливи се во супер корисна во понапредните случаи кога ќе сакате да се потсетиме што сте го направиле во минатото. Како и да е, Продолжуваме со следниот, ќе видиме дека ние почнат да се движат низ за телефонска линија. Ајде да продолжувам да одам низ овде со n малку од малку. Наместо пишување N секој пат, можете исто така да само притиснете ентер. Кога ќе притиснете ентер без внесување ништо, GDB само повторува претходната команда. Така, сега сме хит на printf повик. Изгледа ние сме навистина помина низ нашите за јамка 4 пати, што е она што сакате да го направите со цел да се множи со 1, 2, 3, и 4. Се чини како тоа е работа, освен кога ние хит следната повторно ќе го добиеме овој огромен број наместо 24. Ако ние печати вредноста на факториел користење p, можеме да видиме дека факториел ја имаат оваа масовен број во неа. Нешто дефинитивно ќе погрешно. Во овој момент, сепак, ние сме речиси на крајот на програмата, и тоа е премногу доцна да се поправи ништо. Сепак, можеме да рестартирам програмата со пишување r повторно и тогаш y за да потврдите. Сега сме назад во нашата точка на прекин на почетокот на главната. Ние знаеме дека сè изгледа да биде во ред со читање на n. па ние да скокнете напред со n. Алтернативно, може да се постави нов точки на прекин по направите додека јамка и се фрламе таму. Ајде да го направите тоа. Изгледа линија 14 доаѓа само по јамка. Да се ​​постави точки на прекин таму. Тоа е добра практика да наведете име на датотека во оваа точка на прекин команда бидејќи GDB може да се збунети ако си работат со повеќе датотеки. Да се ​​движи напред на овој точки на прекин, ние ќе го користите продолжи или в команда. Океј, тука сме во за телефонска линија. Ајде да одиме уште 1 линија во за телефонска линија, а потоа ние ќе започнете со печатење променливи за да видите што се случува. Ајде бидете сигурни дека јас навистина 1, како што се очекуваше. То, тоа е добро. Што факториел иако? Леле, тоа не е добро. Имаме голем негативен број тука. Од кај тоа се случи? Па, ако ги погледнеме назад во кодот, можеме да видиме дека ние никогаш нема да го иницијализира, па ние само што влегов ѓубре во таму. Што дефинитивно ќе го отфрли нашата пресметка. За среќа, не мораме да го напушти GDB да го надминете овој. Ние може да се иницијализира тука и да ја поправите тоа во кодот подоцна употребувајќи го печати ја командата. Ние ќе го иницијализира до 1 од factorials на нула и 1 двата 1, и ако ние го иницијализира на нула, тогаш ние секогаш ќе заврши со нула како што е нашата резултат. Можете да поставите било променлива овој начин, кој е супер корисна. Сега, ајде да продолжиме со нашата програма. Ајде бидете сигурни дека сè е каде што би требало да биде. Сите граѓани на РМ треба да биде 4, јас треба да биде 1 и факториел треба да биде 1 премногу. Ние можеме да кратенка овој процес и печатење на сите наши локални променливи со супер-корисна команда инфо мештаните, која отпечатоци од сите наши во опсегот локални променливи. Како и да е, тоа изгледа како сè е добро да отидевме. Да направиме уште еден зелено околу од циклусот само за да бидете сигурни. Океј, сè изгледа одлично. Сега можеме да го користиме продолжи команда за да одат до крај. Слатка! 4 факториел отпечатени 24 како што се очекуваше. Сега можеме да одиме надминете овој во нашиот код. Наместо да се откажат од GDB, ние ќе користи друг терминал јазичето за да го направите тоа. Ќе се вратам на нашите GDB табот, ние сега треба да го прекомпајлирате нашата извршна. Една од најдобрите работи за GDB е дека не треба да ја напушти GDB да се кандидира направи. Така што ние не удираш стариот точки на прекин, ајде да ги исклучите со, ќе го претпоставам, оневозможи команда. Ова ќе ги оневозможи сите наши точки на прекин. Сега можеме да го рестартирате програма со r и бидете сигурни дека сè е во ред. Изгледа сè е добро да отидевме. Факториел од 4 отпечатоци од 24, исто како што мислевме. GDB е една од најпознатите корисни алатки имаш во вашиот алатникот. Постојат еден тон повеќе работи што можете да направите со GDB, многу повеќе отколку што можете да направите со едноставен исписи. Следниот пат кога вашата програма не прави она што го сакате, пробајте да ја отворите GDB да дознаам што се случува внатре. Со малку пракса, ќе бидете во можност да разбивка десно на вашиот бубачка во ниеден момент. Моето име е Нејт Hardison. Ова е CS50.