как работает GDB? - PullRequest
       17

как работает GDB?

30 голосов
/ 11 октября 2010

Я хочу знать, как GDB работает внутри.например, я знаю краткое представление о том, что он использует системный вызов ptrace () для мониторинга отслеживаемой программы.Но я хочу знать, как он обрабатывает сигналы, как он вставляет новый код и другие невероятные вещи, которые он делает.

Ответы [ 3 ]

16 голосов
/ 11 октября 2010

Ознакомьтесь с Руководством по внутренним компонентам GDB , которое охватывает некоторые важные аспекты. Существует также более старая PDF-версия этого документа.

Из руководства:

Этот документ описывает внутреннюю часть отладчика GNU, gdb. Он включает описание ключевых алгоритмов и операций GDB, а также механизмов, которые адаптируют GDB к конкретным хостам и целям.

6 голосов
/ 11 октября 2010

Единственный способ узнать это - изучить источник .

Вы также можете собрать и отладить его самостоятельно.Шаг за шагом кода, и вы будете точно знать, как он делает то, что он делает.

Чтение источника GDB не для слабонервных - он переполнен макросамии интенсивно использует libbfd, что само по себе трудно понять.

Это необходимо, потому что он переносим (и, в частности, строит и работает на платформах, которые вообще не имеют ptrace()).

4 голосов
/ 23 марта 2015

Взято из gdbint.pdf:

Это можно сделать как в виде аппаратных точек останова, так и в виде программного обеспечения. контрольные точки:

  • Аппаратные точки останова иногда доступны как встроенные функции отладки с некоторыми чипами. Как правило, эти работы, посвятив регистр, в котором может быть сохранен адрес точки останова. Если ПК (сокращение от счетчика программы) всегда соответствует значению в точке останова регистрируется, процессор выдает исключение и сообщает об этом в GDB.
  • Другая возможность - использование эмулятора; многие эмуляторы включают схемы, которые следят за адресными линиями, выходящими из процессор, и заставить его остановиться, если адрес соответствует точке останова адрес.
  • Третья возможность состоит в том, что цель уже может каким-то образом делать точки останова; например, монитор ПЗУ может делать свой собственный программные точки останова. Так что, хотя это не буквально аппаратное обеспечение точки останова, с точки зрения GDB, они работают одинаково;
  • Программные точки останова требуют, чтобы GDB выполнял несколько больше работы. Основная теория заключается в том, что GDB заменит инструкцию программы ловушкой, незаконное разделение или какая-либо другая инструкция, которая приведет к исключение, а затем, когда он встречается, GDB возьмет исключение и остановите программу. Когда пользователь скажет продолжить, GDB восстановит оригинальная инструкция, пошаговая, заново вставьте ловушку, и продолжайте.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...