IDE Window: Call Stack/ru
│
Deutsch (de) │
English (en) │
français (fr) │
русский (ru) │
Важно
Вы должны настроить отладчик и запустить проект для его отладки. Только тогда это окно будет полезно.
Вывод, показанный на этой странице, основан на отладчике GNU (GDB), который в настоящее время является единственным отладчиком, поддерживаемым Lazarus. Его вывод иногда выглядит как C, а не Pascal. Другие отладчики могут показать более Паскалеподобный стиль.
Диалоговое окно
Что такое стек вызовов?
Стек вызовов - это стек вызовов функций. Верхняя строка - это текущая функция, нижняя строка - основная программа.
Столбец Source
В этом столбце указано имя исходного файла. Эта информация извлекается из отладочной информации, содержащейся в исполняемом файле (или из внешнего файла символов GDB, если вы выбрали эту опцию). Эту содержат информацию только те части программы, которые явно скомпилированы с отладочной информацией.
Столбец Line
Если позиция содержит отладочную информацию, будет показан номер исходной строки, в противном случае отображается только указатель адреса в исполняемом файле. В этой строке была вызвана следующая функция.
Столбец Function
Искаженное имя процедуры или функции. Компилятор преобразует идентификаторы Паскаля в имена, которые могут использовать инструменты GNU (разработанные для кода C). Например:
TAPPLICATION__CREATEFORM(0x81fb738, void, (^TAPPLICATION) 0xb7cd0014)
Это означает:
- Измененное имя функции - TAPPLICATION__CREATEFORM, которое является процедурой TApplication.CreateForm модуля LCL forms.pp. Поскольку Pascal не чувствителен к регистру, а инструменты GNU чувствительны к регистру, FPC преобразует имя в верхний регистр. Поскольку инструменты GNU не знают о классах и объектах, class.method преобразуется в имя глобальной функции.
- Список параметров зависит от платформы и соглашения о вызовах. Это означает, что список параметров можно перевернуть, начиная с самого правого параметра. Так обстоит дело в приведенном выше примере.
- Параметр 'Self' является неявным, что означает, что вы не записываете его в исходный код Pascal, потому что FPC создает его автоматически. Это всегда первый параметр, генерируемый компилятором (хотя и невидимый в исходном коде Паскаля). Из-за обратного порядка параметров Self отображается здесь как последний параметр. Он имеет тип ^TAPPLICATION и его шестнадцатеричное представление 0xb7cd0014.
- Следующий параметр в Паскале - это 'var Reference', не имеющий типа. Следовательно, это 'void'.
- Последний параметр в Паскале - 'InstanceClass: TComponentClass'. Gnu видит этот параметр просто как указатель с шестнадцатеричным значением 0x81fb738.
Маленькие хитрости
Дважды щелкните по строке, чтобы перейти к исходному коду.
Show (Показать)
Переход к позиции исходного кода текущей строки.
Set as current (Задать как текущий)
Задать выбранную запись в качестве текущего фрейма стека. Локальные переменные существуют только в пределах своего собственного фрейма локального стека. Задав текущий фрейм, вы можете наблюдать за значениями переменных в (локальном) контексте выбранной вами процедуры.
Copy all (Копировать все)
Копирование стека вызовов в буфер обмена.