Вызов подпрограмм определяемых пользователем
Вызов подпрограмм определяемых пользователем
Одной из важных особенностей отладчика GDB является его способность вызывать в процессе отладки подпрограммы, определяемые пользователем.Это можно выполнить путем простого ввода команды вызова подпрограммы, которая имеет следующий вид:
call subprogram-name (parameters) |
Ключевое слово call может быть опущено в случае, когда имя подпрограммы subprogram-name не совпадает с какой-либо предопределенной командой GDB.
В результате выполнения этой команды
осуществляется вызов указанной подпрограммы
и передача ей списка параметров,
которые заданы в команде.В качестве параметров могут быть указаны выражения
и они могут содержать переменные отлаживаемой программы.Подпрограмма должна быть определена в программе на уровне библиотеки,
поскольку GDB вызывает подпрограмму в окружении,
которое устанавливается для выполнения отлаживаемой программы
(это также подразумевает, что подпрограмма обладает возможностью
доступа и даже может модифицировать значения переменных внутри программы).
Важность данного средства заключается в том, что оно позволяет использовать в программе различные отладочные подпрограммы, которые приспособлены к каким-либо специфическим структурам данных отлаживаемой программы.Подобные подпрограммы отладки могут быть написаны с целью получения высокоуровневого отображения внутреннего состояния какого-либо абстрактного типа данных, что намного удобнее чем использование распечатки содержимого памяти (иначе - дамп памяти), которая заната структурой данных, на физическом уровне.Следует учитывать, что стандартная команда отладчика GDB print имеет представление только о физическом расположении типов в памяти, а не об их смысловом значении и абстрактном представлении.Отладочные подпрограммы могут предусматривать отображение информации с учетом требуемого семантического уровня и, таким образом, их использование при отладке программы может быть очень полезно.
Например, при непосредственной отладке GNAT, ключевым моментом является наличие доступа к содержимому узлов семантического дерева, которое содержит внутреннее представление программы.Однако, узлы семантического дерева представляются в виде целочисленных значений, которые являются индексами в таблицу узлов.Использование встроенной команды print, для узлов семантического дерева, обеспечит простое отображение целочисленных значений, что не обладает желаемой информативностью.Таким образом, намного удобнее использовать подпрограмму PN (описана в файле treepr.adb дистрибутива исходных текстов GNAT), которая принимает на входе узел семантического дерева и отображает его высокоуровневое представление, включающее синтаксическую категорию данного узла, его место в исходном тексте, целочисленные значения, соответствующие родительскому узлу и узлам потомкам, а также множество дополнительной семантической информации.Для более детального изучения этого примера можно обратиться к телу этой процедуры в указанном файле.