Як використовувати налагоджувач GNU в Linux

Налагоджувач GNU використовується для налагодження програми, для аналізу збою або для того, щоб побачити, що програма робить у певний момент. Він був розроблений проектом GNU у 1980-х роках і був одним із найпоширеніших налагоджувачів командного рядка, а також одним із найпопулярніших програмних засобів GNU.

Давайте спочатку напишемо невелику програму на C, яку потім будемо налагоджувати. Для початку створіть новий .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 Список класів команд: псевдоніми -- Псевдоніми точки зупину інших команд -- Змушування програми зупинятися в певних точках дані -- Перевірка файлів даних -- Визначення та перевірка внутрішніх елементів файлів -- Незрозумілі команди обслуговування -- Запущені незрозумілі функції -- Запуск програмного стека -- Перевірка стану стека -- Підтримка запитів про стан -- Точки відстеження засобів підтримки -- Відстеження виконання програми без зупинки програми, визначені користувачем -- Визначені користувачем команди Введіть "довідку", а потім назву класу для списку команд цього класу. Введіть «допомога всім» для списку всіх команд. Введіть «довідка», а потім назву команди, щоб отримати повну документацію. Введіть "apropos word", щоб знайти команди, пов'язані зі словом. Допускаються скорочення назв команд, якщо вони однозначні.

Потім можна ввести довідка ім'я_класу щоб побачити команди, що належать до цього класу. Для пошуку команд за допомогою підрядка використовуйте щодо підрядка.

Щоб встановити точку зупинки, коли програма входить до функції, запустити:

$(gdb) break main

Тут ми встановлюємо точку зупинки на єдиній функції в нашому коді, тобто. основний. Використовуйте команду бігти щоб виконати програму до наступної точки зупинки або до виходу.

$(gdb) запустити

Щоб встановити точку зупинки в певному місці функції, використовувати:

розрив *основний + 4

Це встановить точку зупину в 4-му рядку функції main.

тепер, щоб перейти через потік програми до наступного рядка коду, просто запустіть крок команда.

$(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, 0x000000000040052a в main () на test.c:3 3 int main() { 1: i = 2: f = 3: h = (void *) 0x0 4: main = {int ()} 0x400526 5: i = 

Це змусить налагоджувач перейти до місця розташування 2-го рядка коду функції основний. Зауважте, що тут я перейшов із початку основної локації безпосередньо до другої. Отже, змінна я ніколи не було встановлено, що призводить до помилки налагоджувача, що він не може отримати доступ до вмісту пам’яті за адресою змінної я.

Ось деякі з основних команд, які можуть допомогти вам розпочати налагодження виконуваного файлу в Linux. Сподіваємося, що інформація на цій сторінці стане вам у нагоді.

Категорія: Linux