10.3. Пояснения по работе с gdb

На верх  Назад  Вперёд

Имеются некоторые особенности Free Pascal, о которых вы должны помнить при работе с gdb. Ниже перечислены основные из них:

1.Free Pascal генерирует информацию для GDB символами в верхнем регистре. Это результат того, что Pascal – не чувствительный к регистру язык. Поэтому при обращении к переменным или функциям, вы должны печатать их имена в верхнем регистре. Например, если вы хотите наблюдать за значением переменной count, вы должны напечатать:
 
watch COUNT
 
Или если вы хотите остановить программу точно на какой-то функции (например, на MyFunction), то вы должны напечатать:
 
break MYFUNCTION
 

2.gdb не понимает множества.

3.gdb не понимает строки. Строки представлены в gdb как записи с множеством полей или как массив символов, содержащий строку.
Вы можете также использовать следующую функцию для печати строк:
 
define pst
set $pos=&$arg0
set $strlen = {byte}$pos
print {char}&$arg0.st@($strlen+1)
end
 
document pst
Print out a Pascal string
End
 
Если вы вставите её в файл gdb.ini, вы сможете просмотреть строку с помощью этой функции. Это пример файла gdb.ini есть в приложении ПРИЛОЖЕНИЕ Е Простой файл gdb.ini.

4.Объекты трудно обрабатывать, потому что gdb ориентирована в первую очередь на С и С++. Обходным путём является представление методов объектов как функций с дополнительным параметром this (в нижнем регистре!). Имя такой функции – это объединение имени объекта и имени функции,  разделённые двумя символами подчёркивания.
Например, метод TPoint.Draw должен быть преобразован в TPOINT__DRAW и для остановки программы на этой функции нужно использовать:
 
break TPOINT__DRAW
 

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