Познаването на GDB дебъгер, разработването на софтуер за Linux

Познаването дебъгер GDB

Познаването дебъгер GDB

Грешки, за съжаление, се срещат в някоя програма, без значение колко готино е професионален разработчик. Ето защо, независимо дали ви харесва или не, да се използват за корекция на грешки все още е необходимо. Животът сила. И колкото повече време прекарвате на изследването вече работи с него, толкова повече време ще ви спести в бъдеще.

Ние считаме, GDB дебъгер, предоставена GNU софтуер.

Тази компилация се постига чрез добавяне на -g флаг, за да заповяда да се съберат. Например, ако щяхме kalkul програма, без да използвате Makefile, ние ще даде следната команда:

г ++ main.cpp problem.cpp -о kalkul -g

Ако използваме командата грим, е необходимо да се сложи опция CFLAGS = -g. Тогава всички отбори в компилация, съдържаща се в Make-файл, ще получат автоматично флага -g.

Да вземем една програма, която сме създали в main.cpp файл, problem.cpp и problem.h (тогава наречен проект директория kalkulcpp). Ние Makefile вече генерира. Нека да ги използвате.

Почистване на пакета от резултатите от предишното НС.

Ще се съберат отново програмата, но този път с включването на информация за отстраняване на грешки.

Изпълнете GDB дебъгер, който трябва да изтеглите програмата ни за отстраняване на грешки. (Ако си спомняте, ние имаме изпълнима програма е в КРБ директория.)

За да стартирате програмата вътре дебъгер, стартирайте команда се дава.

За да видите изходния код, даден от командата списък.

Задайте точка на прекъсване на линия номер 21. Точка на прекъсване на - етикет, указващ, че програмата достига това място, трябва да спре.

Вижте къде да зададете точка на прекъсване, можете да използвате инфо точки на прекъсване команда.

(Ако желаете, вместо номер линия, за да се посочи името на функцията, а след това програмата ще спре пред функцията.)

Представяме на първия номер 5 и знака на математическите дейности "+". Програмата идва с точка на прекъсване и спиране, движейки се с нас ред, в който се намира този момент.

Ние, разбира се, е интересно да се знае точно там, където бяхме, и че програмата е успял да постигне. Дайте команда обратно проследяване.

Дебъгера ни дава следната информация:

# 0 CProblem :: Изчисли (това = 0x804b008) при problem.cpp: 21

# 1 0x08048e00 в CProblem :: решаване (това = 0x804b008) при problem.cpp: 93

# 2 0x08048efc в основната () при main.cpp: 15

Това означава, че ние сме във функцията работи Изчисли, която е член функция на класа CProblem. Той е бил причинен от функцията Решете същия клас, както и че, от своя страна, от чиято основна функция. По този начин, обратно проследяване команда показва цялото топче, наречени функции от началото на програмата до сегашното си място.

Нека да видим, какво е едно и също на този етап стойността на на числата.

И ние веднага показва броя 5, което ние въведохме в програмата. (Въведената стойност от нас с клавиатурата, я възлага на променливата.)

Ако вместо печат ще използвате командата дисплей, стойността на тази променлива ще се показва всеки път, когато програмата е спряна, без никакви специални инструкции.

Добавяне на друга точка на прекъсване на ред 25 problem.cpp файл.

Ние продължаваме програмата.

Нека видим, какви са ценностите на нашите променливи на числата, SecondNumeral и експлоатация. Ако си спомняте, това са променливите, които са декларирани в CProblem клас.

Имаме 5, "+", 2. Тя трябва да бъде така. Но нека сега "променила решението си" и по-добра стойност на променливата SecondNumeral 4. GDB дебъгер ви позволява да говорите по време на програмата, за да промените стойността на всяка променлива.

Ако не вярвате, че неговата стойност се е променило, можете да проверите.

ние ozhidaetm сега, че резултатът е 9. Да се ​​стартира програмата до края.

Резултатът е наистина 9.

Нека сега uberom нашата гранична стойност. Изглежда сме създали две такива точки. Но това може да бъде проверена.

Unas не бива да остава никакви точки на прекъсване. Проверете.

В действителност няма нито един.

Да вървим сега, нека да преминете през цялата програма (за щастие, ние я имаме малко).

Поставихме точка на прекъсване в десетия ред на основния файл.

Достигането до десета линия, тя ще спре. Сега ние преминаваме през него, като спират на всеки ред, с помощта на командата стъпка.

За да се избегне пишете всеки път е-т-е-р, можете просто да въведете писмо с. Веднага след като програмата достига ПРОБЛЕМ команда> SetValues ​​(), той веднага отива в problem.cpp файл където определение CProblem-членки на функционални :: SetValues ​​() и преминават код за тази функция. Същото важи, когато става въпрос да се обадя на проблеми> Решаване ().

За извикване на функция, програмата не е в него, и продължи да се извършва само на сегашното ниво на комина, вместо командата стъпка се дава след това, или просто п.

Когато влязохме функцията, но не искам да продължи да взема това стъпка по стъпка, и ние искаме да може да работи и да ни върнат към предишното ниво на стека (т.е. обратно към функция, която я е предизвикала), ние използваме командата покритие.

Ние даваме кратък списък на най-често срещаните GDB Debugger команди. За повече информация, можете да се разбира винаги се отнасят до описанието на интегрираната програма (информация GDB) или ръководството за използване на (мъж GDB).

обратно проследяване - показва целия път до текущата точка на прекъсване, което е, имената на всички функции от главната (); с други думи, тя премахва факта, че целият стек;

пробие - поставя точка на прекъсване; параметър може да бъде номер линия или името на функцията;

ясен - премахва всички точки на прекъсване в сегашното ниво на стека (т.е. текущата функция);

продължи - продължава програмата от текущата точка до края;

изтриване - премахва точка на прекъсване или гледате изразяване;

дисплей - добавя израз в списъка с изрази, чиито стойности се показват всеки път, програмата спира;

покритие - изпълнява програмата, за да излезете от функцията; Тя показва стойността на връщане, ако има такива;

Информация точки на прекъсване - показва списък на всички налични точки на прекъсване;

информация watchpoints - показва списък с всички налични израз контрол;

списък - показва изходния код; като параметър предава име на файла източник, а след това през дебелото черво, номера на началната и крайната линия;

Следващата - стъпка по линия на програмата, но, за разлика от етапа на команда, не извършва стъпка по стъпка функция изисква;

печат - отпечатва стойността на израз (израз предава като параметър);

тичам - управлява програма за изпълнение;

комплект - задава нова стойност на променливата

стъпка - стъпка изпълнение на програмата;

часовник - създава препратка изразяване, програмата ще спре веднага след като референтната стойност от промените в изразяването му;

Linukstsentra библиотека. списък на разделите