Отладчик GNU

редактировать
Отладчик уровня исходного кода
Отладчик GNU
Gdb archer fish.svg
GDB-s creenshot.gif
Разработчик (и) Проект GNU
Первоначальный выпуск1986; 34 года назад (1986)
Стабильный выпуск 9.2 / 23 мая 2020 г.; 4 месяца назад (2020-05-23)
Репозиторий Измените это в Викиданных
Написано наC
Операционная система Unix-подобная, Windows
Тип Отладчик
Лицензия GPLv3
Веб-сайтwww.gnu.org / software / gdb

Отладчик GNU Debugger (GDB ) - это портативный отладчик, который работает на многих Unix-подобных системах и работает для многих языков программирования, включая Ada, C, C ++, Objective-C, Free Pascal, Fortran, Go и частично другие.

Содержание
  • 1 История
  • 2 Технические детали
    • 2.1 Возможности
    • 2.2 Удаленное управление отладка
    • 2.3 Графический интерфейс пользователя
  • 3 Примеры команд
  • 4 Пример сеанса
  • 5 См. также
  • 6 Ссылки
  • 7 Внешние ссылки
    • 7.1 Документация
    • 7.2 Учебники
История

GDB был впервые написан Ричардом Столменом в 1986 году как часть его системы GNU после того, как его GNU Emacs был "reaso стабильно ". GDB - это бесплатное программное обеспечение, выпущенное под Стандартной общественной лицензией GNU (GPL). Он был смоделирован на основе отладчика DBX, который поставлялся с дистрибутивами Berkeley Unix.

С 1990 по 1993 год его поддерживал Джон Гилмор. Теперь он поддерживается Руководящим комитетом GDB, который назначается Free Software Foundation.

Технические детали

Характеристики

GDB предлагает обширные возможности для отслеживания и изменения выполнения компьютерные программы. Пользователь может отслеживать и изменять значения внутренних переменных программы и даже вызывать функции независимо от нормального поведения программы.

Целевые процессоры GDB (по состоянию на 2003 г.) включают: Alpha, ARM, AVR, H8 / 300, System / 370, System 390, X86 и его 64-битное расширение X86-64, IA-64 «Itanium», Motorola 68000, MIPS, PA-RISC, PowerPC, SuperH, SPARC и VAX. Менее известные целевые процессоры, поддерживаемые в стандартной версии, включают A29K, ARC, ETRAX CRIS, FR-V, Intel i960, 68HC11, Motorola 88000, MCORE, MN10300, NS32K и Z8000. (Новые выпуски, вероятно, не будут поддерживать некоторые из них.) GDB скомпилировал симуляторы даже для менее известных целевых процессоров, таких как M32R или V850.

GDB is по-прежнему активно развивается. Начиная с версии 7.0 новые функции включают поддержку сценариев Python, а начиная с версии 7.8 - сценарии GNU Guile. Начиная с версии 7.0, доступна поддержка «обратимой отладки», позволяющая откатить сеанс отладки назад, подобно тому, как перематывать сбойную программу, чтобы увидеть, что произошло.

Удаленная отладка

GDB предлагает «удаленный» режим часто используется при отладке встроенных систем. Удаленная работа - это когда GDB работает на одной машине, а отлаживаемая программа - на другой. GDB может связываться с удаленной «заглушкой», которая понимает протокол GDB, через последовательное устройство или TCP / IP. Программа-заглушка может быть создана путем связывания с соответствующими файлами-заглушками, поставляемыми с GDB, которые реализуют целевую сторону протокола связи. В качестве альтернативы, gdbserver можно использовать для удаленной отладки программы без необходимости изменять ее каким-либо образом.

Этот же режим также используется KGDB для отладки работающего ядра Linux на уровне исходного кода с помощью gdb. С помощью KGDB разработчики ядра могут отлаживать ядро ​​почти так же, как отлаживают прикладные программы. Это позволяет размещать точки останова в коде ядра, выполнять пошаговое выполнение кода и наблюдать за переменными. В архитектурах, где доступны регистры аппаратной отладки, могут быть установлены точки наблюдения, которые запускают точки останова при выполнении или доступе к указанным адресам памяти. KGDB требует дополнительной машины, подключенной к машине для отладки с помощью последовательного кабеля или Ethernet. На FreeBSD также возможна отладка с использованием FireWire прямого доступа к памяти (DMA).

Графический интерфейс пользователя

Отладчик не содержит своего собственного графического пользовательского интерфейса и по умолчанию использует интерфейс командной строки , хотя он содержит текстовый пользовательский интерфейс. Для него было создано несколько интерфейсов, таких как, Data Display Debugger (DDD), Nemiver, KDbg, Xcode debugger, GDBtk / Insight и графический интерфейс HP Wildebeest Debugger (WDB GUI). IDE, например Codelite, Code :: Blocks, Dev-C ++, Geany, GNAT Студия программирования (GPS), KDevelop, Qt Creator, Lazarus, MonoDevelop, Eclipse, NetBeans и Visual Studio могут взаимодействовать с GDB. GNU Emacs имеет "режим GUD" и инструменты для существования (например, clewn). Они предлагают возможности, аналогичные отладчикам в IDE.

Некоторые другие инструменты отладки были разработаны для работы с GDB, например, детекторы утечки памяти.

Примеры команд
gdb programОтладка «программы» (из оболочки)
run -vЗапуск загруженной программы с параметрами
btBacktrace (в случае сбоя программы)
информационные регистрыДамп всех регистров
disas $ pc-32, $ pc + 32Disassemble
Пример сеанса

Рассмотрим следующее исходный код, написанный на C :

#include #include #include size_t foo_len (const char * s) {return strlen (s); } int main (int argc, char * argv) {const char * a = NULL; printf ("размер a =% lu \ n", foo_len (a)); выход (0); }

Используя компилятор GCC в Linux, приведенный выше код должен быть скомпилирован с использованием флага -g, чтобы включить соответствующую отладочную информацию в двоичный файл. сгенерирован, что позволяет проверить его с помощью GDB. Предполагая, что файл, содержащий приведенный выше код, называется example.c, команда для компиляции может быть следующей:

$ gcc example.c -Og -g -o example

И двоичный файл теперь можно запустить:

$./example Segmentation fault

Поскольку пример кода при выполнении генерирует segmentation fault, GDB может использоваться для проверки проблемы.

$ gdb./example GNU gdb (GDB) Fedora (7.3.50.20110722-13.fc16) Copyright (C) 2011 Free Software Foundation, Inc. Лицензия GPLv3 +: GNU GPL версии 3 или более поздней Это бесплатное программное обеспечение : вы можете изменять и распространять его. НИКАКИХ ГАРАНТИЙ в той степени, в которой это разрешено законом. Для получения подробной информации введите "показать копирование" и "показать гарантию". Этот GDB был настроен как "x86_64-redhat-linux-gnu". Инструкции по сообщениям об ошибках см. В: ... Чтение символов из /path/example...done. (gdb) run Запуск программы: / path / example Программа получила сигнал SIGSEGV, ошибка сегментации. 0x0000000000400527 в foo_len (s = 0x0) в example.c: 8 8 return strlen (s); (gdb) print s $ 1 = 0x0

Проблема присутствует в строке 8 и возникает при вызове функции strlen (поскольку ее аргумент, s, равно NULL ). В зависимости от реализации strlen (inline или нет) вывод может быть другим, например:

GNU gdb (GDB) 7.3.1 Copyright (C) 2011 Free Software Foundation, Inc. Лицензия GPLv3 + : GNU GPL версии 3 или выше Это бесплатное программное обеспечение: вы можете изменять и распространять его. НИКАКИХ ГАРАНТИЙ в той степени, в которой это разрешено законом. Для получения подробной информации введите "показать копирование" и "показать гарантию". Этот GDB был сконфигурирован как «i686-pc-linux-gnu». Инструкции по сообщению об ошибках см. В: ... Чтение символов из /tmp/gdb/example...done. (gdb) run Запуск программы: / tmp / gdb / example Программа получила сигнал SIGSEGV, ошибка сегментации. 0xb7ee94f3 в strlen () из /lib/i686/cmov/libc.so.6 (gdb) bt # 0 0xb7ee94f3 в strlen () из /lib/i686/cmov/libc.so.6 # 1 0x08048435 в foo_len (s = 0x0) в example.c: 8 # 2 0x0804845a в main (argc = , argv = ) в example.c: 16

Чтобы исправить проблему, переменная a( в функции main) должен содержать допустимую строку. Вот фиксированная версия кода:

#include #include #include size_t foo_len (const char * s) {return strlen (s); } int main (int argc, char * argv) {const char * a = "Это тестовая строка"; printf ("размер a =% lu \ n", foo_len (a)); выход (0); }

Перекомпиляция и повторный запуск исполняемого файла внутри GDB теперь дает правильный результат:

GNU gdb (GDB) Fedora (7.3.50.20110722-13.fc16) Copyright (C) 2011 Free Software Foundation, Inc. Лицензия GPLv3 +: GNU GPL версии 3 или более поздней <https://gnu.org/licenses/gpl.html >Это бесплатное программное обеспечение: вы можете изменять и распространять его. НИКАКИХ ГАРАНТИЙ в той степени, в которой это разрешено законом. Для получения подробной информации введите "показать копирование" и "показать гарантию". Этот GDB был настроен как "x86_64-redhat-linux-gnu". Инструкции по сообщению об ошибках см. На странице <https://www.gnu.org/software/gdb/bugs/ >... Чтение символов из /path/example...done. (gdb) run Запуск программы: / path / example size of a = 21 [Нижний 1 (процесс 14290) завершился нормально]

GDB печатает вывод printfна экране, а затем информирует пользователя что программа вышла нормально.

См. Также
  • Портал бесплатного программного обеспечения с открытым исходным кодом
  • icon Портал компьютерного программирования
Ссылки
Внешние ссылки

Документация

Учебники

Последняя правка сделана 2021-05-21 09:10:50
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте