GNU Debugger - Википедия - GNU Debugger
Разработчики) | Проект GNU |
---|---|
изначальный выпуск | 1986 |
Стабильный выпуск | 10.1[1] / 24 октября 2020 |
Репозиторий | |
Написано в | C |
Операционная система | Unix-подобный, Windows |
Тип | Отладчик |
Лицензия | GPLv3 |
Интернет сайт | www |
В Отладчик GNU (GDB) это портативный отладчик это работает на многих Unix-подобный систем и работает для многих языки программирования, включая Ада, C, C ++, Цель-C, Free Pascal, Фортран, Идти,[2] и частично другие.[3]
История
GDB был впервые написан Ричард Столмен в 1986 году в рамках его GNU система, после его GNU Emacs был «достаточно стабильным».[4] GDB - это бесплатно программное обеспечение выпущен под Стандартная общественная лицензия GNU (GPL). Он был смоделирован после DBX отладчик, поставляемый с Беркли Unix раздачи.[4]
С 1990 по 1993 год его обслуживала Джон Гилмор.[5] Теперь он поддерживается Руководящим комитетом GDB, который назначается Фонд свободного программного обеспечения.[6]
Технические детали
Функции
GDB предлагает обширные возможности для отслеживания и изменения выполнения компьютерные программы. Пользователь может отслеживать и изменять значения внутренних программ. переменные, и даже позвонить функции независимо от нормального поведения программы.
Целевые процессоры GDB (по состоянию на 2003 г.) включают: Альфа, РУКА, AVR, H8 / 300, Альтера Ниос / Ниос II, Система / 370, Система 390, X86 и его 64-битное расширение X86-64, IA-64 "Итаниум", Motorola 68000, MIPS, PA-RISC, PowerPC, SuperH, SPARC, и VAX. Менее известные целевые процессоры, поддерживаемые в стандартной версии, включают A29K, ARC, ETRAX CRIS, D10V, D30V, FR-30, FR-V, Intel i960, 68HC11, Motorola 88000, MCORE, MN10200, MN10300, NS32K, Бурный16, и Z8000. (Новые выпуски, скорее всего, не будут поддерживать некоторые из них.) GDB скомпилирован. тренажеры для даже менее известных целевых процессоров, таких как M32R или же V850.[7]
GDB все еще активно развивается. Начиная с версии 7.0 новые функции включают поддержку Python сценарии[8] и начиная с версии 7.8 GNU Guile сценарии тоже.[9] Начиная с версии 7.0, доступна поддержка «обратимой отладки», позволяющая откатить сеанс отладки назад, что очень похоже на перемотку сбойной программы, чтобы увидеть, что произошло.[10]
Удаленная отладка
GDB предлагает «удаленный» режим, который часто используется при отладке встроенных систем. Удаленная работа - это когда GDB работает на одной машине, а отлаживаемая программа - на другой. GDB может связываться с удаленной «заглушкой», которая понимает протокол GDB, через последовательное устройство или TCP / IP.[11] Программа-заглушка может быть создана путем связывания с соответствующими файлами-заглушками, поставляемыми с GDB, которые реализуют целевую сторону протокола связи.[12] В качестве альтернативы, gdbserver может использоваться для удаленной отладки программы без каких-либо изменений.
Этот же режим также используется КГДБ для отладки запущенного Ядро Linux на исходном уровне с помощью gdb. С помощью KGDB разработчики ядра могут отлаживать ядро почти так же, как отлаживают прикладные программы. Это позволяет размещать точки останова в коде ядра, выполнять пошаговое выполнение кода и наблюдать за переменными. В архитектурах, где доступны регистры аппаратной отладки, могут быть установлены точки наблюдения, которые запускают точки останова при выполнении или доступе к указанным адресам памяти. KGDB требует дополнительной машины, которая подключена к машине для отладки с помощью последовательный кабель или же Ethernet. На FreeBSD, также можно отладить, используя FireWire прямой доступ к памяти (DMA).[13]
Графический пользовательский интерфейс
Отладчик не содержит собственных графический интерфейс пользователя, и по умолчанию Интерфейс командной строки, хотя в нем есть текстовый пользовательский интерфейс. Для этого было построено несколько интерфейсов, таких как UltraGDB, Xxgdb, Отладчик отображения данных (DDD), Немивер, KDbg, то Xcode debugger, GDBtk / Insight и графический интерфейс HP Wildebeest Debugger (WDB GUI). Иды Такие как Коделайт, Код :: Блоки, Dev-C ++, Geany, Студия программирования GNAT (GPS), KDevelop, Qt Creator, Лазарь, MonoDevelop, Затмение, NetBeans, и Visual Studio может взаимодействовать с GDB. GNU Emacs есть «режим ГУД» и инструменты для VIM существуют (например, расколотый). Они предлагают возможности, аналогичные отладчикам в IDE.
Некоторые другие инструменты отладки были разработаны для работы с GDB, например утечка памяти детекторы.
Примеры команд
программа gdb | Отладка "программы" (из оболочки) |
---|---|
запустить -v | Запускаем загруженную программу с параметрами |
bt | Backtrace (в случае сбоя программы) |
регистры информации | Выгрузить все регистры |
disas $ pc-32, $ pc + 32 | Разобрать |
Пример сеанса
Рассмотрим следующий исходный код, написанный на C:
#включают <stdio.h>#включают <stdlib.h>#включают <string.h>size_t foo_len( const char *s ){ возвращаться Strlen( s );}int главный( int argc, char *argv[] ){ const char *а = НОЛЬ; printf( "размер a =% lu п", foo_len(а) ); выход( 0 );}
С использованием GCC компилятор на Linux, приведенный выше код должен быть скомпилирован с использованием -грамм
flag, чтобы включить соответствующую отладочную информацию в сгенерированный двоичный файл, что делает возможным его проверку с помощью GDB. Предполагая, что файл, содержащий приведенный выше код, называется example.c
, команда для сборник может быть:
$ gcc example.c -Og -g -o пример
И теперь двоичный файл можно запустить:
$ ./примерОшибка сегментации
Поскольку код примера при выполнении генерирует ошибка сегментации, GDB можно использовать для проверки проблемы.
$ gdb ./exampleGNU gdb (GDB) Fedora (7.3.50.20110722-13.fc16)Авторское право (C) 2011 Free Software Foundation, Inc.Лицензия GPLv3 +: GNU GPL версии 3 или более поздней Это бесплатное программное обеспечение: вы можете изменять и распространять его.НИКАКИХ ГАРАНТИЙ в той степени, в которой это разрешено законом. Типа "показать копирование"и "показать гарантию" для подробностей.Этот GDB был настроен как "x86_64-redhat-linux-gnu".Инструкции по сообщению об ошибках см. ...Чтение символов из /path/example...done.(GDB) пробегЗапуск программы: / путь / примерПрограмма получила сигнал SIGSEGV, Ошибка сегментации.0x0000000000400527 в foo_len (s = 0x0) в example.c: 88 возвратных строк;(GDB) печать с$1 = 0x0
Проблема присутствует в строке 8 и возникает при вызове функции Strlen
(потому что его аргумент, s
, является НОЛЬ
В зависимости от реализации strlen (в соответствии или нет) вывод может быть другим, например:
GNU gdb (GDB) 7.3.1Авторское право (C) 2011 Free Software Foundation, Inc.Лицензия GPLv3 +: GNU GPL версии 3 или более поздней Это бесплатное программное обеспечение: вы можете изменять и распространять его.НИКАКИХ ГАРАНТИЙ в той степени, в которой это разрешено законом. Типа "показать копирование"и "показать гарантию" для подробностей.Этот GDB был сконфигурирован как «i686-pc-linux-gnu».Инструкции по сообщению об ошибках см. В следующих разделах: ...Чтение символов из /tmp/gdb/example...done.(GDB) пробегЗапуск программы: / 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 в основном (argc=<оптимизировано>, argv=<optimized out>) в example.c: 16
Чтобы устранить проблему, переменная а
(в функции главный
) должен содержать допустимую строку. Вот фиксированная версия кода:
#включают <stdio.h>#включают <stdlib.h>#включают <string.h>size_t foo_len( const char *s ){ возвращаться Strlen(s);}int главный( int argc, char *argv[] ){ const char *а = «Это тестовая строка»; printf( "размер a =% lu п", foo_len(а) ); выход( 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) runStarting program: / path / examplesize of a = 21 [Нижний 1 (процесс 14290) завершился нормально]
GDB печатает вывод printf
на экране, а затем информирует пользователя, что программа завершилась нормально.
Смотрите также
Рекомендации
- ^ Бробекер, Джоэл (2020-10-24). "Выпущен GDB 10.1!". Получено 2020-10-24.
- ^ «Документация GDB - Поддерживаемые языки». Получено 2011-11-28.
- ^ "Документация GDB - Резюме". Получено 2011-11-28.
- ^ а б «Лекция Ричарда Столмена в Королевском технологическом институте Швеции (1986-10-30)». Получено 2006-09-21.
Затем, когда GNU Emacs стал достаточно стабильным, на что в общей сложности потребовалось около полутора лет, я начал возвращаться к другим частям системы. Я разработал отладчик, который я назвал GDB, который представляет собой символический отладчик для кода C, который недавно поступил в дистрибутив. Теперь этот отладчик в значительной степени выполнен в духе DBX, отладчика, поставляемого с Berkeley Unix.
- ^ «Джон Гилмор (активист)». hyperleap.com.
- ^ «Руководящий комитет GDB». Получено 2008-05-11.
- ^ «Документация GDB - Резюме - Соавторы». Получено 2011-12-01.
- ^ «Примечания к выпуску GDB 7.0». Получено 2011-11-28.
- ^ Джоэл Бробекер (29.07.2014). "Выпущен GDB 7.8!". Получено 2014-07-30.
- ^ «Обратная отладка с GDB». Получено 2014-01-20.
- ^ "Как: удаленный последовательный протокол GDB: написание сервера RSP" (PDF).
- ^ «Реализация удаленной заглушки».
- ^ «Отладка ядра с помощью Dcons».
внешняя ссылка
- Официальный веб-сайт
- UltraGDB: отладка Visual C / C ++ с помощью GDB в Windows и Linux
- KGDB: отладчик уровня ядра ядра Linux
- Веб-сайт "MyGDB: GDB Frontend" на корейском языке
- Плагин Visual Studio для отладки с помощью GDB
- Сравнение внешних интерфейсов GDB, 2013 г.
- Использование Eclipse в качестве интерфейса для отладчика GDB
Документация
- Ричард М. Столмен, Роланд Пеш, Стэн Шебс, и другие., Отладка с GDB (Фонд свободного программного обеспечения, 2011) ISBN 978-0-9831592-3-0
- Внутреннее устройство GDB
Учебники
- Руководство RMS по gdb (Райан Майкл Шмидт, не Ричард Мэтью Столлман )