IDE Window: Call Stack/ru

From Lazarus wiki
Revision as of 20:59, 24 January 2021 by Zoltanleo (talk | contribs) (Created page with "{{IDE Window: Call Stack}} == Важно == Вы должны настроить отладчик и запустить проект для его о...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Deutsch (de) English (en) français (fr) русский (ru)

Важно

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

Вывод, показанный на этой странице, основан на отладчике GNU (GDB), который в настоящее время является единственным отладчиком, поддерживаемым Lazarus. Его вывод иногда выглядит как C, а не Pascal. Другие отладчики могут показать более Паскалеподобный стиль.

Диалоговое окно

Callstack.png

Что такое стек вызовов?

Стек вызовов - это стек вызовов функций. Верхняя строка - это текущая функция, нижняя строка - основная программа.

Столбец Source

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

Столбец Line

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

Note-icon.png

Примечание: Нумерация строк - это нумерация на момент последней компиляции проекта с отладочной информацией. Если вы впоследствии вставляли или удаляли строки, нумерация будет неправильной.

Столбец 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.

Маленькие хитрости

Дважды щелкните по строке, чтобы перейти к исходному коду.

Popup menu

Callstack popmenu.png

Show (Показать)

Переход к позиции исходного кода текущей строки.

Set as current (Задать как текущий)

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

Copy all (Копировать все)

Копирование стека вызовов в буфер обмена.