Как да използвате GNU Debugger в Linux

GNU Debugger се използва за отстраняване на грешки в програма, за анализ на срива или за да видите какво прави програмата в определен момент. Той е разработен от проекта GNU през 80-те години на миналия век и е един от най-широко използваните програми за отстраняване на грешки в командния ред, както и един от най-популярните софтуери на GNU.

Нека първо напишем малка C програма, която след това ще отстраним грешките. За да започнете, създайте нов .° С файл с помощта на vim или всеки редактор по ваш избор:

vim test.c

Създайте следната C програма:

#include int main() { int i = 5; float f = 5,5 i = i + 3; f = f + 2,2; printf("Стойността на i и f са: %d и %f\n", i, f); връщане на 0; }

Натиснете Бягство за да отидете в команден режим vim. След това напишете :wq за да запазите програмата и да излезете.

Компилирайте и вижте дали програмата работи:

gcc test.c -o test ./test Стойността на i и f са: 8 и 7,700000

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

gcc test.c -g -o тест

За да започнете да отстранявате грешки нашия изпълним файл тест в gdb, ние бягаме:

gdb тест

Ще отвори gdb конзола, където можете да въведете gdb команди. За да видите списък с команди, използвайте помогне команда.

$(gdb) help Списък с класове команди: псевдоними -- Псевдоними на точки на прекъсване на други команди -- Принудително спиране на програмата в определени точки данни -- Проверка на файлове с данни -- Уточняване и проверка на вътрешните файлове на файлове -- Неясни команди за поддръжка -- Неясни функции , които се изпълняват -- Изпълнение на програмния стек -- Проверка на състоянието на стека -- Поддръжка на запитвания за състоянието -- Точки за проследяване на средства за поддръжка -- Проследяване на изпълнението на програмата без спиране на програмата, дефинирана от потребителя -- Дефинирани от потребителя команди Въведете "help", последвано от име на клас за списък с команди в този клас. Въведете "помощ на всички" за списъка с всички команди. Въведете "помощ", последвано от име на командата за пълна документация. Въведете "apropos word", за да търсите команди, свързани с "word". Съкращенията на имената на командите са разрешени, ако са недвусмислени.

След това можете да въведете помощ име_на клас за да видите команди, принадлежащи към този клас. За да търсите команди с помощта на подниз, използвайте по отношение на подниз.

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

$(gdb) прекъсване на главния

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

$(gdb) стартиране

За да зададете точка на прекъсване на определено място във функция, използвайте:

прекъсване *основен + 4

Това ще настрои точка на прекъсване на 4-ти ред на основната функция.

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

$(gdb) стъпка 5: float f = 5,5;

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

$(gdb) показва i 6: i = 5

За да промените съдържанието на променлива, което може да е необходимо за анализиране на изпълнението на програма при специфични стойности на променлива, run задайте променлива =Израз.

$(gdb) задайте променлива i=10 $(gdb) дисплей i 7: i = 10

Тук „Изразът“ може да бъде всеки валиден (аритметичен/логически) израз. За простота просто присвояваме друга стойност (10) на променливата и.

За да отпечатате асемблерния код за програмата, използвайте команда разглобяване име на функция:

Използвайте само разглобявам за отпечатване на асемблерния код за цялата програма. Обърнете внимание на стрелката на конкретен ред в кода за сглобяване. Означава, че сесията за отстраняване на грешки в момента е на пауза в това конкретно място в паметта (т.е. този ред код).

За да прескочите дебъгера към определен ред код, бягай:

$(gdb) jump *main + 2 Продължава на 0x400528. Точка на прекъсване 2, 0x0000000000040052a в main () при test.c:3 3 int main() { 1: i = 2: f = 3: h = (void *) 0x0 4: main = {int ()} 0x400526 5: i = 

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

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

Категория: Linux