logo

GDB (покроковий вступ)

GDB означає GNU Project Debugger і є потужним інструментом налагодження для C (разом з іншими мовами, такими як C++). Це допоможе вам поратися всередині ваших програм на C під час їх виконання, а також дозволяє побачити, що саме відбувається, коли ваша програма аварійно завершує роботу. GDB працює з виконуваними файлами, які є двійковими файлами, створеними в процесі компіляції.

Для демонстраційних цілей наведений нижче приклад виконується на комп’ютері Linux із наведеними нижче специфікаціями.



uname -a>
uname

uname -a

Давайте навчимося, роблячи: -

Запустіть GDB

Перейдіть до командного рядка Linux і введіть gdb.

gdb>

gdb



параметр у сценарії оболонки

Підказка про відкриття Gdb повідомляє, що він готовий до команд. Щоб вийти з gdb, введіть quit або q.

quit_gdb

Кинути

Скомпілюйте код

Нижче наведено програму, яка демонструє невизначену поведінку під час компіляції за допомогою C99. список-1



Примітка: Якщо об’єкт, який має тривалість автоматичного зберігання, не ініціалізовано явно, його значення є невизначеним, де невизначене значення є або невизначеним значенням, або представленням перехоплення.

Тепер скомпілюйте код. (тут test.c). g прапор означає, що ви можете бачити правильні назви змінних і функцій у ваших фреймах стека, отримувати номери рядків і бачити джерело, коли ви переміщуєтеся у виконуваному файлі. -std=прапор C99 передбачає використання стандарту C99 для компіляції коду. -о прапор записує вихід збірки у вихідний файл.

gcc -std=c99 -g -o test test.C>

gcc -std=c99 -g -o test test.C

Запустіть GDB зі згенерованим виконуваним файлом

Введіть наступну команду, щоб запустити GDB зі скомпільованим виконуваним файлом.

gdb ./test>

gdb ./test

Корисні команди GDB:

Ось декілька корисних команд для початку роботи з GDB.

Команда опис
біг або р Виконує програму від початку до кінця.
розрив або б Встановлює точку зупину на певному рядку.
відключити Вимикає точку зупину
включити Вмикає вимкнену точку зупину.
наступний або п Виконує наступний рядок коду, не занурюючись у функції.
крок Перехід до наступної інструкції, занурення у функцію.
список або л Відображає код.
друк або стор Відображає значення змінної.
кинути або q Вихід із GDB.
ясно Очищає всі контрольні точки.
продовжувати Продовжує нормальне виконання

Відобразити код

Тепер введіть l у запит gdb, щоб відобразити код.

точка зупину

Відобразити код

Встановіть точку зупинки

Давайте введемо точку зупину, скажімо, рядок 5.

info_b

Встановіть точку зупинки

Якщо ви хочете встановити точку зупину в різних рядках, ви можете ввести b номер_рядка .За умовчанням список або l відображають лише перші 10 рядків.

Переглянути контрольні точки

Щоб побачити точки зупину, введіть info b.

відключити

Переглянути контрольні точки

перетворення рядка в дату

Вимкніть точку зупину

Зробивши вищезазначене, скажімо, ви передумали та хочете повернутися. Тип disable b.

enable-1

Вимкніть точку зупину

Знову ввімкніть вимкнену точку зупину

Як позначено синім кружком, Enb стає n для вимкненого. 9. Повторне ввімкнення нещодавно вимкненої точки зупину. Тип enable b.

first_run

Знову ввімкніть вимкнену точку зупину

Запустіть код

Запустіть код, ввівши run або r. Якщо ви не встановили жодної точки зупинки, команда run просто виконає повну програму.

print_value_x

Запустіть код

Вивести значення змінних

Щоб побачити значення змінної, введіть print ім'я_змінної або стор ім'я_змінної .

Вивести значення змінних

Вище показано значення, збережені в x під час виконання.

Змінити значення змінних

Щоб змінити значення змінної в gdb і продовжити виконання зі зміненим значенням, введіть set ім'я_змінної .

Вихід налагодження

На скріншоті нижче показано значення змінних, з яких цілком зрозуміло, чому ми отримали на виході сміттєве значення. При кожному виконанні . /тест ми отримаємо інший результат.

Вправа: спробуйте використати set x = 0 у gdb під час першого запуску та подивіться результат c.

Вихід налагодження

GDB пропонує багато інших способів налагодження та розуміння вашого коду, як-от перевірка стека, пам’яті, потоків, маніпулювання програмою тощо. Сподіваюся, наведений вище приклад допоможе вам розпочати роботу з gdb.

Висновок

У цій статті ми обговорили GDB (GNU Debugger), який є потужним інструментом у Linux, який використовується для налагодження програм C. Ми обговорили деякі з наступних кроків, щоб ми могли скомпілювати ваш код з інформацією про налагодження, запустити GDB, встановити точку зупинки, перевірити змінні та проаналізувати поведінку програми. Ми також обговорили функції GDB, такі як перевірка коду, керування точками зупинки, маніпулювання змінними та контроль виконання програми, які дозволяють нам ефективно налагоджувати та вирішувати проблеми.