Sign in Join
Wiki copytemporary

IDE Window: Call Stack/ru: what changed

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

Title: IDE Window: Call Stack/ru

OldNewLine
1+## Важно
2+
3+Вы должны [[Debugger Setup/ru|настроить отладчик]] и запустить проект для его отладки. Только тогда это окно будет полезно.
4+
5+Вывод, показанный на этой странице, основан на отладчике GNU (GDB), который в настоящее время является единственным отладчиком, поддерживаемым Lazarus. Его вывод иногда выглядит как C, а не Pascal. Другие отладчики могут показать более Паскалеподобный стиль.
6+
7+## Диалоговое окно
8+
9+![](/wiki-images/3/32/Callstack.png)
10+
11+### Что такое стек вызовов?
12+
13+Стек вызовов - это стек вызовов функций. Верхняя строка - это текущая функция, нижняя строка - основная программа.
14+
15+### Столбец Source
16+
17+В этом столбце указано имя исходного файла. Эта информация извлекается из отладочной информации, содержащейся в исполняемом файле (или из внешнего файла символов GDB, если вы выбрали эту опцию). Эту содержат информацию только те части программы, которые явно скомпилированы с отладочной информацией.
18+
19+### Столбец Line
20+
21+Если позиция содержит отладочную информацию, будет показан номер исходной строки, в противном случае отображается только указатель адреса в исполняемом файле. В этой строке была вызвана следующая функция.
22+
23+> **Note:** Нумерация строк - это нумерация на момент последней компиляции проекта с отладочной информацией. Если вы впоследствии вставляли или удаляли строки, нумерация будет неправильной.
24+
25+### Столбец Function
26+
27+Искаженное имя процедуры или функции. Компилятор преобразует идентификаторы Паскаля в имена, которые могут использовать инструменты GNU (разработанные для кода C). Например:
28+
29+` TAPPLICATION__CREATEFORM(0x81fb738, void, (^TAPPLICATION) 0xb7cd0014)`
30+
31+Это означает:
32+
33+- Измененное имя функции - TAPPLICATION__CREATEFORM, которое является процедурой TApplication.CreateForm модуля LCL forms.pp. Поскольку Pascal не чувствителен к регистру, а инструменты GNU чувствительны к регистру, FPC преобразует имя в верхний регистр. Поскольку инструменты GNU не знают о классах и объектах, *class.method* преобразуется в имя глобальной функции.
34+- Список параметров зависит от платформы и соглашения о вызовах. Это означает, что список параметров можно перевернуть, начиная с самого правого параметра. Так обстоит дело в приведенном выше примере.
35+- Параметр 'Self' является неявным, что означает, что вы не записываете его в исходный код Pascal, потому что FPC создает его автоматически. Это всегда первый параметр, генерируемый компилятором (хотя и невидимый в исходном коде Паскаля). Из-за обратного порядка параметров Self отображается здесь как последний параметр. Он имеет тип ^TAPPLICATION и его шестнадцатеричное представление 0xb7cd0014.
36+- Следующий параметр в Паскале - это 'var Reference', не имеющий типа. Следовательно, это 'void'.
37+- Последний параметр в Паскале - 'InstanceClass: TComponentClass'. Gnu видит этот параметр просто как указатель с шестнадцатеричным значением 0x81fb738.
38+
39+### Маленькие хитрости
40+
41+Дважды щелкните по строке, чтобы перейти к исходному коду.
42+
43+## Popup menu
44+
45+![](/wiki-images/e/e2/Callstack_popmenu.png)
46+
47+### Show (Показать)
48+
49+Переход к позиции исходного кода текущей строки.
50+
51+### Set as current (Задать как текущий)
52+
53+Задать выбранную запись в качестве текущего фрейма стека. Локальные переменные существуют только в пределах своего собственного фрейма локального стека. Задав текущий фрейм, вы можете наблюдать за значениями переменных в (локальном) контексте выбранной вами процедуры.
54+
55+### Copy all (Копировать все)
56+
57+Копирование стека вызовов в буфер обмена.
58+
59+---
60+*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