~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ EBB8DD5E7871ED67E1B3E20C1316BCCB__1715860440 ✰
Заголовок документа оригинал.:
✰ GNU Debugger - Wikipedia ✰
Заголовок документа перевод.:
✰ Отладчик GNU — Википедия, бесплатная энциклопедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/GNU_Debugger ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/eb/cb/ebb8dd5e7871ed67e1b3e20c1316bccb.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/eb/cb/ebb8dd5e7871ed67e1b3e20c1316bccb__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 11:25:04 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 16 May 2024, at 14:54 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Отладчик GNU — Википедия, бесплатная энциклопедия Jump to content

GNU-отладчик

Из Википедии, бесплатной энциклопедии
GNU-отладчик
Разработчики) Проект GNU
Начальная версия 1986 год ; 38 лет назад ( 1986 )
Стабильная версия
14.2 [1]  Отредактируйте это в Викиданных / 3 марта 2024 г.
Репозиторий
Написано в С , С++ , Питон
Операционная система Unix-подобный , Windows
Тип Отладчик
Лицензия лицензия GPLv3
Веб-сайт www .gnu .org /программное обеспечение /gdb

Отладчик GNU ( GDB ) — портативный отладчик , который работает во многих Unix-подобных системах и работает со многими языками программирования , включая Ada , Assembly , C , C++ , D , Fortran , Haskell , Go , Objective-C , OpenCL C , Modula. -2 , Паскаль , Руст , [2] и частично другие. [3]

История [ править ]

GDB был впервые написан Ричардом Столлманом в 1986 году как часть его системы GNU , после того как его GNU Emacs стал «достаточно стабильным». [4] GDB — бесплатное программное обеспечение , выпущенное под лицензией GNU General Public License (GPL). Он был создан по образцу отладчика DBX , который входил в состав дистрибутивов Berkeley Unix . [4]

С 1990 по 1993 год его поддерживал Джон Гилмор . [5] Сейчас его поддерживает Руководящий комитет GDB, назначенный Фондом свободного программного обеспечения . [6]

Технические подробности [ править ]

Особенности [ править ]

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

Целевые процессоры GDB (по состоянию на 2003 год) включают: Alpha , ARM , AVR , H8/300 , Altera Nios/Nios II , System/370 , System 390 , X86 и его 64-битное расширение X86-64 , IA-64 «Itanium». , 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 , Stormy16 и З8000 . (Более новые версии, скорее всего, не будут поддерживать некоторые из них.) 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 можно использовать для удаленной отладки программы без необходимости каким-либо образом ее изменять.

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

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

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

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

Внутренности [ править ]

GDB использует системный вызов с именем ptrace (это название является аббревиатурой от «трассировка процесса») для наблюдения и управления выполнением другого процесса, а также для проверки и изменения памяти и регистров процесса.

Общие команды GDB Соответствующие вызовы ptrace
(gdb) start PTRACE_TRACEME — делает родителя трассировщиком (вызываемым трассируемым объектом)
(gdb) attach PID PTRACE_ATTACH – присоединить к запущенному процессу
(gdb) stop kill(child_pid, SIGSTOP) (или PTRACE_INTERRUPT )
(gdb) continue PTRACE_CONT
(gdb) info registers PTRACE_GET(FP)REGS(ET) и PTRACE_SET(FP)REGS(ET)
(gdb) x PTRACE_PEEKTEXT и PTRACE_POKETEXT

Точка останова реализуется путем замены инструкции по заданному адресу памяти другой специальной инструкцией. Выполнение инструкции точки останова вызывает SIGTRAP.

Примеры команд [ править ]

$ gdb program Отладка «программы» (из оболочки)
(gdb) run -v Запустите загруженную программу с параметрами
(gdb) bt Backtrace (в случае сбоя программы)
(gdb) info registers Дамп всех регистров
(gdb) disas $pc-32, $pc+32 Разобрать

Пример сеанса [ править ]

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

#include   <stdio.h> 
 #include   <stdlib.h> 
 #include   <string.h> 

 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   пример
 

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

$  ./пример 
  Ошибка сегментации 

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

$  gdb   ./пример 
  GNU gdb (GDB) Fedora (7.3.50.20110722-13.fc16) 
 Авторские права (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 

 Программа получила сигнал SIGSEGV, ошибка сегментации. 
  0x0000000000400527 в foo_len (s=0x0) в example.c:7 
 7 return strlen (s); 
  (gdb)   напечатайте s 
 $  1   =   0x0 
 

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

GNU gdb (GDB) 7.3.1 
 Авторские права (C) 2011 Free Software Foundation, Inc. 
 Лицензия GPLv3+: GNU GPL версии 3 или новее <https://gnu.org/licenses/gpl.html> 
 Это свободное программное обеспечение: вы свободно изменять и распространять его. 
  НЕТ НИКАКИХ ГАРАНТИЙ, в пределах, разрешенных законом.   Для получения подробной информации введите «показать копирование» 
 и «показать гарантию». 
  Эта GDB была настроена как «i686-pc-linux-gnu». 
  Инструкции по сообщению об ошибках см.: 
 <https://www.gnu.org/software/gdb/bugs/>... 
 Чтение символов из /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:7 
  #  2    0x0804845a   в   основном   (  argc  =  <оптимизированный   вывод>,   argv  =  <оптимизированный   вывод>  )   в   example.c:14 
 

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

#include   <stdio.h> 
 #include   <stdlib.h> 
 #include   <string.h> 

 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 теперь дает правильный результат:

$  gdb   ./пример 
  GNU gdb (GDB) Fedora (7.3.50.20110722-13.fc16) 
 Авторские права (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)   запустить 
 Стартовая программа: /path/example 
 размер = 21 
 [Низший 1 (процесс 14290) завершился нормально] 

GDB печатает вывод printf на экране, а затем сообщает пользователю, что программа завершилась нормально.

См. также [ править ]

Ссылки [ править ]

  1. ^ Жоэль Бробекер (3 марта 2024 г.). «GDB 14.2 выпущен!» . Проверено 3 марта 2024 г.
  2. ^ «Документация GDB — Поддерживаемые языки» . Архивировано из оригинала 28 декабря 2017 г. Проверено 28 ноября 2011 г.
  3. ^ «Документация GDB — Резюме» . Архивировано из оригинала 1 июля 2012 г. Проверено 28 ноября 2011 г.
  4. ^ Перейти обратно: а б «Лекция Ричарда Столлмана в Королевском технологическом институте, Швеция (30 октября 1986 г.)» . Проверено 21 сентября 2006 г. Затем, когда GNU Emacs стал достаточно стабильным, что в общей сложности заняло около полутора лет, я начал возвращаться к другим частям системы. Я разработал отладчик, который назвал GDB, который представляет собой символический отладчик для кода C, который недавно поступил в распространение. Этот отладчик во многом соответствует духу DBX, отладчика, поставляемого с Berkeley Unix.
  5. ^ «Джон Гилмор (активист)» . Hyperleap.com . Архивировано из оригинала 26 февраля 2021 г. Проверено 13 октября 2020 г.
  6. ^ «Руководящий комитет ГББ» . Проверено 11 мая 2008 г.
  7. ^ «Документация GDB — Резюме — Участники» . Архивировано из оригинала 29 сентября 2011 г. Проверено 1 декабря 2011 г.
  8. ^ «Примечания к выпуску GDB 7.0» . Проверено 28 ноября 2011 г.
  9. ^ Джоэл Бробекер (29 июля 2014 г.). «GDB 7.8 выпущен!» . Проверено 30 июля 2014 г.
  10. ^ «Обратная отладка с помощью GDB» . Проверено 20 января 2014 г.
  11. ^ «Как: удаленный последовательный протокол GDB: написание сервера RSP» (PDF) .
  12. ^ «Реализация удаленной заглушки» .
  13. ^ «Отладка ядра с помощью Dcons» .

Внешние ссылки [ править ]

Документация [ править ]

Учебники [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: EBB8DD5E7871ED67E1B3E20C1316BCCB__1715860440
URL1:https://en.wikipedia.org/wiki/GNU_Debugger
Заголовок, (Title) документа по адресу, URL1:
GNU Debugger - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)