Пример: var
BigArray[1..1000] of integer;
Нужно просмотреть элементы с 826 по 833. в этом случае в поле Expression ставится начальный элемент.
BigArray[826];
RepeatCount:=8; будут отображены элементы с 826 по 833
2) Digits – отображение переменной позволяет определить количество значений цифр у чисел с плавающей точкой.
3) Enable – при отключении этого флага предотвращается вывод значений переменной. Но Delphi будет хранить все параметры для ее просмотра
Кроме того, в Watch Properties есть переключатель, позволяющий выбрать способ отображения значения переменной.
Char – символы
String – строки
Pointer – указатель
Record/Structure – массив/записи
Humory Pump – кусок памяти
Default – по умолчанию (автоматически)
В некоторых случаях отладчик выдает сообщение о причинах, по которым содержимое переменных недоступно в окно Watch List.
«Variable XXX inaccessible here due to optimization».
«Переменная ХХ недоступна из-за оптимизации». Значит, что в данной точке значение переменной невозможно просмотреть (но иногда это можно сделать в другом месте, так как для нее не выделена память из-за оптимизации компилятора).
Если важно просмотреть значение переменной в данной точке, то надо нажать Ctrl + F2 (отключение оптимизации, запуск по новой).
Symbol was eliminated by linked – переменная удалена компоновщиком. Переменная удалена из программы, так как на нее нет ссылок в тексте программы.
Отладчик также выводит сообщение об ошибке, если имя переменной задано неверно.
Рекомендация. В случае, если необходимо просмотреть значение выражения, содержащего функции, то в этом случае в программу вводятся дополнительные переменные на время отладки, которым присваивается значение нужного выражения; и в процессе отладки смотрится значение этой созданной переменной.
Диалоговое окно Evaluate/Modify
Нужно нажать правую кнопку мыши на переменной и выбрать Evaluate/Modify. В этом окне 3 поля: Expression, Result, New value; и три кнопки: Evaluate, Modify, Help.
Поля: - Expression – выражение для пространства и измерения
- Result – область вывода значений выражения
- New Value – область ввода нового значения выражения
Кнопки: - Evaluate – вычисление значения выражения и отображение в Result
- Modify - присвоить переменной новое значение, находящееся в поле New value
Особенностью окна Evaluate/Modify является, что поле Result не меняется динамически в процессе отладки, до тех пор не будет нажата Evaluate (вычислить).
Поле Result отображается в нескольких строках. Это позволяет удобно просматривать массивы и структуры данных (записи).
Установка точек прерывания
Точка прерывания – Breakpoint является своеобразным знаком «стоп» для отладчика. Установленная точка прерывания в редакторе подсвечивается красной строкой. Запустив на выполнение программу, в которой есть точка прерывания программа будет выполняться пока не встретится точка прерывания. Переход в режим отладки и ждет дальнейших действий.
Точки прерывания бывают:
- безусловные (остановка в любом случае)
- условные (остановка при выполнении логического условия или по количеству проходов)
Точка прерывания может быть установлена двумя способами:
- курсор на выбранную строку программы и нажатие F5
- Run → Add Breakpoint
Run /Add Breakpoint имеет раздел New.
Для удаления точки прерывания нужно нажать F5 в этой строке или Run /Add Breakpoint/Delete
При добавлении точки прерывания через меню, Delphi выдает окно редактирования точки прерывания – Edit Breakpoint. В этом окне четыре поля: имя файла, номер строки, условие останова, количество проходов. Первые два поля не следует изменять.
Condition – остается пустым, если точка прерывания безусловная, либо в это поле вводится логическое выражение языка Pascal, при выполнении которого происходит остановка программы в данной точке.
Pass Count – обычно равно нулю, что означает: остановиться в этой точке при ее первом появлении в программе. Если стоит другое положительное число, то остановка в том случае, когда эту точку прерывания программа прошла более указанного количества раз. Это поле полезно при отладке больших циклов.
После установки одной или нескольких точек прерывания можно использовать окно Breakpoint List для управления и редактирования точек прерывания. Оно вызывается через меню View/Breakpoints. В этом окне выдается список всех точек прерывания, каждую из которых можно определить, удалить (правой кнопкой мыши – контекстовое меню).
В этом окне можно не удаляя точку прерывания отменить временно ее Disable или Disable all.
Окно процессора (дизассемблер)
View/CPU Window – вызов окна
Позволяет увидеть работу приложения на уровне языка ассемблера. Эффектное его использование предполагает знание языка ассемблера IBM PC для процессора Intel x86 и архитектуры процессора.
Окно состояния подзадач
View/Threads - вызов окна.
В нем все активные подзадачи текущего процесса.
Окно модулей
View/Modules - вызов окна.
В окне отображаются все модули, которые располагаются в адресном пространстве приложения. В него входят подключающие DLL - файлы и библиотеки, подключающие из другой библиотеки, а также библиотеки, загруженные операционной системой.
В этом окне информация вводится в виде таблицы с 3 столбцами:
-имя модуля;
-адрес начала кода модуля;
-полный путь каталога, из которого загружен модуль.
Информация в каталоге может быть важна, если возможна загрузка модуля не из того каталога, из которого ожидалась, например, в более старой версии.
Окно вызова стека
View/Call Stack - вызов окна.
В этом окне представлен список всех функций и процедур, вызванных к моменту достижения точки выполнения и работа которых приостановлена.
В верхней строке выводится имя технической процедуры, а в следующем, имя, вызвавшее данную процедуру. Это бывает полезно в отладке, когда необходимо скрыть, каким путем достигнута точка остановки. Также это полезно для отладки рекурсивных программ, процедур и функций.
Дополнительные возможности представляет контекстное меню окна (правая кнопка мыши).
Указатели
Это переменные, значениями которых являются адреса указываемых ими областей памяти.
К указателю можно обращаются по имени при этом указатель определяется также как и переменная, только перед именем типа, на который указывает переменная ставится специальный значок «^».
Пример: Var UK: ^ integer;
Указатель – это адрес. Указатель часто используют в программировании при описании следующих динамических структур данных – односвязные линейные стеки, двухсвязные линейные стеки, деревья, очереди, стеки, коллекции и т. д.
Динамические структуры данных
Рассмотрим системное исполнение указателей, перечисленных в структурах данных.
Все перечисленные структуры являются динамическими. Они создаются (под них выделяется оперативная память) во время выполнения программы и также могут быть уничтожены (память освобождается).
Динамические структуры отличаются от статических, в которых как правило описываются заголовки программ. Когда описывается статическая переменная в заголовке программы, то под них при компиляции программы выделяется оперативная память – 1 раз за всё время выполнения программы, при этом изменить размер выделенной памяти невозможно.
Например, если указан массив
Var
S:array[1..10] of char; то под него 1 раз за всё время выделяется 10 байт оперативной памяти, также как и integer (2-4 байта) и т. д.
Статическая структура описывается в программе.
Односвязные списки
Схематично можно отобразить следующим образом6
Head-голова
Cur-текущий элемент списка
Tail-хвост
Двухсвязный список
Отличается наличием ещё одного указателя, показывающего предыдущий элемент списка.
![]() |
Дерево
Более сложная динамическая структура, в которой может присутствовать несколько указателей на различные узлы дерева.
![]()

![]()
![]()
![]()
![]()
![]()
![]()

![]()
![]()
![]()
![]()
![]()
![]()
![]()

![]()
![]()

Обычно деревья преобразуют к бинарным деревья (это деревья, узлы которых содержат не более 2 порожденных веток).Ветки этих деревьев называются левая ветка и правая ветка.
![]() |
![]()
![]()
![]()
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 |




