Sign in Join
Wiki copytemporary

IDE Window: Call Stack/ru: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11## Важно
22
33Вы должны [[Debugger Setup/ru|настроить отладчик]] и запустить проект для его отладки. Только тогда это окно будет полезно.
44
55Вывод, показанный на этой странице, основан на отладчике GNU (GDB), который в настоящее время является единственным отладчиком, поддерживаемым Lazarus. Его вывод иногда выглядит как C, а не Pascal. Другие отладчики могут показать более Паскалеподобный стиль.
66
77## Диалоговое окно
88
99![](/wiki-images/3/32/Callstack.png)
1010
1111### Что такое стек вызовов?
1212
1313Стек вызовов - это стек вызовов функций. Верхняя строка - это текущая функция, нижняя строка - основная программа.
1414
1515### Столбец Source
1616
1717В этом столбце указано имя исходного файла. Эта информация извлекается из отладочной информации, содержащейся в исполняемом файле (или из внешнего файла символов GDB, если вы выбрали эту опцию). Эту содержат информацию только те части программы, которые явно скомпилированы с отладочной информацией.
1818
1919### Столбец Line
2020
2121Если позиция содержит отладочную информацию, будет показан номер исходной строки, в противном случае отображается только указатель адреса в исполняемом файле. В этой строке была вызвана следующая функция.
2222
2323> **Note:** Нумерация строк - это нумерация на момент последней компиляции проекта с отладочной информацией. Если вы впоследствии вставляли или удаляли строки, нумерация будет неправильной.
2424
2525### Столбец Function
2626
2727Искаженное имя процедуры или функции. Компилятор преобразует идентификаторы Паскаля в имена, которые могут использовать инструменты GNU (разработанные для кода C). Например:
2828
29-` TAPPLICATION__CREATEFORM(0x81fb738, void, (^TAPPLICATION) 0xb7cd0014)`
29+```text
30+ TAPPLICATION__CREATEFORM(0x81fb738, void, (^TAPPLICATION) 0xb7cd0014)
31+```
3032
3133Это означает:
3234
3335- Измененное имя функции - TAPPLICATION__CREATEFORM, которое является процедурой TApplication.CreateForm модуля LCL forms.pp. Поскольку Pascal не чувствителен к регистру, а инструменты GNU чувствительны к регистру, FPC преобразует имя в верхний регистр. Поскольку инструменты GNU не знают о классах и объектах, *class.method* преобразуется в имя глобальной функции.
3436- Список параметров зависит от платформы и соглашения о вызовах. Это означает, что список параметров можно перевернуть, начиная с самого правого параметра. Так обстоит дело в приведенном выше примере.
3537- Параметр 'Self' является неявным, что означает, что вы не записываете его в исходный код Pascal, потому что FPC создает его автоматически. Это всегда первый параметр, генерируемый компилятором (хотя и невидимый в исходном коде Паскаля). Из-за обратного порядка параметров Self отображается здесь как последний параметр. Он имеет тип ^TAPPLICATION и его шестнадцатеричное представление 0xb7cd0014.
3638- Следующий параметр в Паскале - это 'var Reference', не имеющий типа. Следовательно, это 'void'.
3739- Последний параметр в Паскале - 'InstanceClass: TComponentClass'. Gnu видит этот параметр просто как указатель с шестнадцатеричным значением 0x81fb738.
3840
3941### Маленькие хитрости
4042
4143Дважды щелкните по строке, чтобы перейти к исходному коду.
4244
4345## Popup menu
4446
4547![](/wiki-images/e/e2/Callstack_popmenu.png)
4648
4749### Show (Показать)
4850
4951Переход к позиции исходного кода текущей строки.
5052
5153### Set as current (Задать как текущий)
5254
5355Задать выбранную запись в качестве текущего фрейма стека. Локальные переменные существуют только в пределах своего собственного фрейма локального стека. Задав текущий фрейм, вы можете наблюдать за значениями переменных в (локальном) контексте выбранной вами процедуры.
5456
5557### Copy all (Копировать все)
5658
5759Копирование стека вызовов в буфер обмена.
5860
5961---
6062*From the Free Pascal wiki, page "IDE Window: Call Stack/ru", as it stood on 2021-01-24 after a change by Zoltanleo, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history