Команда Linux gdb

Linux 命令大全Справочник команд Linux


GDB (GNU Debugger) — наиболее часто используемый инструмент отладки программ в системах Linux. Он может помочь разработчикам:

  • Отслеживать поток выполнения программы
  • Устанавливать точки останова для приостановки выполнения программы
  • Просматривать и изменять значения переменных
  • Проанализируйте причины сбоев программ
  • Изучите стек вызовов функций

GDB поддерживает множество языков программирования, включая C, C++, Objective-C, Fortran, Ada и т. д., и является незаменимым инструментом отладки для разработчиков Linux.


Установите gdb

В большинстве дистрибутивов Linux gdb можно легко установить через менеджер пакетов:

Примеры

# Ubuntu/Debian
sudo apt-get install gdb

# CentOS/RHEL
sudo yum install gdb

# Fedora
sudo dnf install gdb

# Arch Linux
sudo pacman -S gdb

После установки можно проверить, успешно ли прошла установка, с помощью следующей команды:

gdb --version

Скомпилируйте программу с возможностью отладки

Чтобы отлаживать программу с помощью gdb, необходимо добавить-gопция при компиляции для генерации отладочной информации:

gcc -g program.c -o program

-gЭта опция встраивает информацию об исходном коде в исполняемый файл, позволяя gdb сопоставлять машинные инструкции с исходным кодом.


Основные команды gdb

Запуск и выход из gdb

Примеры

# Запустить gdb и загрузить программу
gdb ./program

# Запустить gdb и подключиться к запущенному процессу
gdb -p PID

# Выйти из gdb
(gdb) quit
# Или сокращённо
(gdb) q

Запустить программу

Примеры

# Запустить программу
(gdb) run
# Или сокращённо
(gdb) r

# Запустить с аргументами
(gdb) run arg1 arg2

Управление точками останова

Примеры

# Установить точку останова на указанной строке
(gdb) break 10
# Или сокращённо
(gdb) b 10

# Установить точку останова на входе в функцию
(gdb) break main
(gdb) break function_name

# Просмотреть все точки останова
(gdb) info breakpoints

# Удалить точки останова
(gdb) delete 1  # Удалить точку останова номер 1
(gdb) delete    # Удалить все точки останова

Управление выполнением программы

Примеры

# Продолжить выполнение до следующей точки останова
(gdb) continue
# Или сокращённо
(gdb) c

# Пошаговое выполнение (с заходом в функции)
(gdb) step
# Или сокращённо
(gdb) s

# Пошаговое выполнение (без захода в функции)
(gdb) next
# Или сокращённо
(gdb) n

# Завершить выполнение текущей функции и вернуться
(gdb) finish

Просмотреть код

Примеры

# Просмотреть код рядом с текущей строкой
(gdb) list
# Или сокращённо
(gdb) l

# Просмотреть код рядом с указанной строкой
(gdb) list 15

# Просмотреть код указанной функции
(gdb) list main

Просмотреть переменные и память

Примеры

# Вывести значение переменной
(gdb) print variable_name
# Или сокращённо
(gdb) p variable_name

# Изменить значение переменной
(gdb) print variable_name = new_value

# Просмотреть тип переменной
(gdb) ptype variable_name

# Просмотреть содержимое памяти
(gdb) x/10xw &variable  # Просмотреть 10 слов в шестнадцатеричном формате

Анализ стека вызовов

Примеры

# Просмотреть стек вызовов
(gdb) backtrace
# Или сокращённо
(gdb) bt

# Переключиться на указанный кадр стека
(gdb) frame 2
# Или сокращённо
(gdb) f 2

Продвинутые методы отладки

Условная точка останова

Примеры

# Точка останова срабатывает, когда i равно i
(gdb) break 10 if i == 5

Точки наблюдения

Примеры

# Пауза при изменении переменной
(gdb) watch variable_name

# Пауза при чтении переменной
(gdb) rwatch variable_name

# Пауза при чтении или изменении переменной
(gdb) awatch variable_name

Многопоточная отладка

Примеры

# Просмотр всех потоков
(gdb) info threads

# Переключиться на указанный поток
(gdb) thread 2

# Разрешить выполнение только текущему потоку
(gdb) set scheduler-locking on

Отладка файлов дампа памяти

Примеры

# Загрузить файл дампа памяти
gdb ./program core

# Просмотреть стек вызовов на момент сбоя
(gdb) bt

графический интерфейс gdb

gdb также поддерживает режим графического интерфейса, который можно запустить с помощью-tuioption:

gdb -tui ./program

Или переключиться на него во время использования:

Примеры

(gdb) layout src  # Отобразить окно исходного кода
(gdb) layout asm  # Отобразить окно ассемблера
(gdb) layout regs # Отобразить окно регистров
(gdb) layout split # Отобразить исходный код и ассемблер одновременно

Практическая настройка gdb

Вы можете добавить общие настройки в~/.gdbinitфайл:

Примеры

# Включить pretty printing
set print pretty on

# Установить размер истории
set history save on
set history size 1000

# Пользовательские команды
define printarray
    set $i = 0
    while $i < $arg0
        printf "array[%d] = %dn", $i, $arg1[$i]
        set $i = $i + 1
    end
end

Устранение типичных проблем

Невозможно увидеть исходный код при отладке

  1. Убедитесь, что-gопция используется во время компиляции
  2. Проверьте, находится ли исходный код в том же месте, что и во время компиляции
  3. Используйтеdirectoryкоманда для добавления пути к исходному коду:
(gdb) directory /path/to/source

Отладка оптимизированного кода

Оптимизация может изменить порядок выполнения кода, что затрудняет отладку. При отладке рекомендуется отключить оптимизацию:

gcc -O0 -g program.c -o program

Итог

gdb — мощный инструмент отладки в Linux. Его освоение может значительно повысить эффективность отладки. В этой статье были представлены основы использования и распространённые команды gdb. Читателям рекомендуется закрепить эти знания на практике отладки. По мере накопления опыта вы обнаружите, что gdb может помочь решить различные сложные проблемы отладки.


Linux 命令大全Справочник команд Linux

Другие расширения