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

Вызов подпрограмм определяемых пользователем


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

Это можно выполнить путем простого ввода команды вызова подпрограммы, которая имеет следующий вид:

call subprogram-name (parameters)

Ключевое слово call может быть опущено в случае, когда имя подпрограммы subprogram-name

не совпадает с какой-либо предопределенной командой GDB.

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

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

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

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

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

Следует учитывать, что стандартная команда отладчика GDB print

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

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

Например, при непосредственной отладке GNAT, ключевым моментом является наличие доступа к содержимому узлов семантического дерева, которое содержит внутреннее представление программы.

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

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

Таким образом, намного удобнее использовать подпрограмму PN

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

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



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