Ада-95. Компилятор GNAT
66ac8edd

Общие сведения об отладчике GNU GDB


Отладчик GDB является платформенно независимым отладчиком общего назначения.

Он может быть использован для отладки программ, которые написаны на разных языках программирования и скомпилированы с помощью GCC.

В частности, с его помощью можно отлаживать Ада-программы, которые скомпилированы с помощью компилятора GNAT.

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

Следует заметить, что здесь приводится только краткий обзор, а исчерпывающая информация по использованию отладчика GDB содержится в руководстве "Отладка с помощью GDB" (Debugging with GDB).

В процессе компиляции программы, компилятор, опционально, способен записывать в генерируемый объектный файл отладочную информацию, которая может включать номера строк, описываемые типы данных и переменные

Эта информация хранится в результирующем файле отдельно от сгенерированного объектного кода.

Следует заметить, что наличие отладочной информации может значительно увеличить результирующий файл, но отладочная информация никак не влияет на исполняемый код, который непосредственно загружается в память, и на его производительность.

Генерация отладочной информации инициируется указанием опциии -g

в команде запуска компилятора gnatgcc или утилиты gnatmake.

Необходимо особо подчеркнуть, что использование этой опции никак не влияет на генерируемый машинный код.

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

Обычно, используемый формат разработан для описания семантики и типов языка C, но GNAT реализует схему трансляции использование которой позволяет кодировать информацию о типах и переменных Ады в стандартном формате языка C.



В большинстве случаев подробности реализации этой схемы трансляции не представляют интереса для пользователя, поскольку GDB выполняет необходимые преобразования автоматически.

Однако, в случае необходимости, информация об этой схеме трансляции может быть получена из файла exp_dbug.ads




дистрибутива исходных текстов GNAT.

При компоновке исполняемой программы, отладочная информация из отдельных объектных файлов собирается воедино и сохраняется в образе исполняемого программного файла программы.

Хотя в результате такого процесса получается значительное увеличение размера генерируемого исполняемого файла программы, при этом не происходит непосредственное увеличение размера исполняемой программы.

Более того, если программа выполняется обычным образом (не под управлением отладчика), то она выполняется также как и в случае отсутствия отладочной информации, и, в реальности, не требует дополнительной памяти.

В случае запуска программы под управлением GDB осуществляется активация отладчика.

Образ программы загружается вплоть до точки запуска программы на выполнение.

При указании команды run

выполнение программы происходит также как и без GDB.

Это является ключевым моментом в философии дизайна GDB.

GDB не вмешивается в работу программы до тех пор пока не будет встречена точка прерывания работы программы.

Если процесс выполнения программы не встречает точек прерывания, то программа выполняется также как и при отсутствии отладчика.

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

Здесь рассматривается базовое использование GDB в текстовом режиме.

Команда запуска GDB имеет следующий вид:

$ gdb program

Здесь, program - это имя исполняемого файла программы.

Заметим, что в случае использования дистрибутива GNAT от ALT, вместо команды gdb

следует использовать команду gnatgdb:

$ gnatgdb program

В результате выполнения показанной команды осуществляется активация отладчика и отображение приглашения командной строки отладчика "(gdb)".

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


Содержание раздела