ГНУ Дебуггер се користи за отклањање грешака у програму, за анализу пада или да види шта програм ради у одређеном тренутку. Развио га је ГНУ пројекат 1980-их и био је један од најчешће коришћених дебагера командне линије, као и један од најпопуларнијих ГНУ софтвера.
Хајде да прво напишемо мали Ц програм који ћемо затим отклонити. Да бисте започели, направите нови .ц
датотеку користећи вим
или било који уредник по вашем избору:
вим тест.ц
Направите следећи Ц програм:
#инцлуде инт маин() { инт и = 5; флоат ф = 5,5 и = и + 3; ф = ф + 2,2; принтф("Вредност и и ф су: %д и %ф\н", и, ф); ретурн 0; }
Притисните Есцапе
да пређете у вим командни режим. Затим откуцајте :вк
да сачувате програм и изађете.
Преведите и видите да ли се програм покреће:
гцц тест.ц -о тест ./тест Вредност и и ф су: 8 и 7,700000
Да бисте омогућили подршку за отклањање грешака у програму, састављамо га са -г
застава. Ако се заставица не користи, корисник и даље може да отклони грешке у програму, иако са ограниченим опцијама.
гцц тест.ц -г -о тест
Да бисте започели отклањање грешака нашу извршну датотеку тест
ин гдб
, трчимо:
гдб тест
То ће отворити гдб
конзоле, где можете да откуцате гдб
команде. Да бисте видели листу команди, користите помоћ
команда.
$(гдб) помоћ Листа класа команди: псеудоними -- псеудониме преломних тачака других команди -- Заустављање програма у одређеним тачкама подаци -- Испитивање датотека са подацима -- Одређивање и испитивање унутрашњих фајлова -- Команде за одржавање нејасне -- Нејасне функције су покренуте -- Покретање стека програма -- Испитивање статуса стека -- Подршка за упите о статусу -- Тачке праћења објеката подршке -- Праћење извршавања програма без заустављања програма које дефинише корисник -- Кориснички дефинисане команде Откуцајте "хелп " након чега следи име класе за листу команди у тој класи. Откуцајте "помоћ свима" за листу свих команди. Откуцајте "хелп" праћено именом команде за пуну документацију. Унесите „апропос ворд“ да бисте тражили команде повезане са „ворд“. Скраћенице назива команди су дозвољене ако су недвосмислене.
Затим можете куцати помоћ цласс_наме
да видите команде које припадају тој класи. Да бисте претраживали команде користећи подниз, користите апропос подниз
.
Да бисте поставили тачку прекида када програм уђе у функцију, трцати:
$(гдб) бреак маин
Овде постављамо тачку прекида на јединој функцији у нашем коду, тј. главни
. Користите команду трцати
да изврши програм до следеће тачке прекида или до изласка.
$(гдб) покренути
Да бисте поставили тачку прекида на одређеној локацији у функцији, користити:
прекид *главни + 4
Ово ће поставити тачку прекида у 4. реду главне функције.
Сада, да пређете преко тока програма на следећи ред кода, једноставно покрените Корак
команда.
$(гдб) корак 5: флоат ф = 5,5;
Да бисте приказали садржај променљиве, трцати приказ
.
$(гдб) приказ и 6: и = 5
Да бисте изменили садржај променљиве, што би могло бити потребно за анализу покретања програма под одређеним вредностима променљиве, рун сет променљива =Израз
.
$(гдб) сет варијабла и=10 $(гдб) приказ и 7: и = 10
Овде „Израз“ може бити било који важећи (аритметички / логички) израз. Ради једноставности, само променљивој доделимо другу вредност (10). и
.
Да бисте одштампали асемблерски код за програм, користите команду дисассембле назив функције
:
Користите само раставити
за штампање асемблерског кода за цео програм. Обратите пажњу на стрелицу на одређеном реду у коду за склапање. Означава да је сесија отклањања грешака тренутно паузирана на тој одређеној меморијској локацији (тј. у тој линији кода).
Да бисте прескочили програм за отклањање грешака на одређену линију кода, трцати:
$(гдб) скок *маин + 2 Наставља се на 0к400528. Тачка прекида 2, 0к0000000000040052а у маин () на тест.ц:3 3 инт маин() { 1: и = 2: ф = 3: х = (воид *) 0к0 4: маин = {инт ()} 0к400526 5: и =
Ово ће учинити да програм за отклањање грешака скочи на меморијску локацију 2. реда кода у функцији главни
. Имајте на уму да сам овде скочио са почетка главне на директно другу локацију. Дакле, променљива и
никада није постављена, што резултира грешком испуштања грешака да не може приступити меморијском садржају на адреси променљиве и
.
Ово су неке од основних команди које вам могу помоћи да почнете са отклањањем грешака у извршној датотеци у Линуку. Надамо се да ће вам информације на овој страници бити од помоћи.