Просмотр значений переменных при помощи окна Watch

Дополнительные опции отладки

Раздел Run меню Delphi содержит некоторые дополнительные команды отладки, которые имеют соответствующие комбинации «горячих» клавиш:

Run (Выполнить) — F9 Откомпилировать и выполнить программу; при работе в режиме отладки — продолжать выполнение программы с данной точки.
Step Over (По шагам без захода в ...) — F8   Вызывает пошаговое выполнение программы со входом в вызываемые функции и процедуры
Trace Into (Трассировка с заходом в ...) — F7   Команда вызывает пошаговое выполнение строк программы, считая вызов функции или процеду­ры за одну строку, т. е. вход в функции и проце­дуры не производится.
Trace to Next Source Line (Трассировка до следующей строки) Shift+F7   Переход к следующей исполняемой строке.
Run to Cursor (Выполнить до курсора) — F4   Команда выполняет программу до того места, на котором расположен курсор в окне редактора кода.  
Show Execution Point (Показать точку выполнения) Команда помещает курсор на операторе, который будет выполняться следующим.
     

 

В Delphi имеются два способа просмотра значений переменных:

· окно наблюдаемых величин (Watches),

· ToolTip Expression Evaluation (Мастер оценки выражений).

Окно наблюдаемых величин дает возможность указать имена переменных, которые вы желаете контролировать и значения которых будут отображаться в небольшом окне. Чтобы добавить наблюдаемую величину, вы можете либо нажать Ctrl+F5, либо выполнить команду меню Run | Add Watch (Выполнить | Добавить наблюдаемую величину) и в появившемся диалоговом окне Watch Properties (Наблюдаемые величины), показанном на рис.6.12, определить следующие параметры: имена переменных, их типы и выражения. Например, вы можете задать

Value 1 + Value2

или

IntToStr(Value1).

 

В диалоговом окне Watch Properties в поле ввода выпадающего списка Expression (Выражение) наберите Valuel. В результате появится диалоговое окно Watch List (Список наблюдаемых величин), где будут отображаться наши наблюдаемые переменные и их текущие значения, как показано на рис.6.13.

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

Process not accessible

(Процесс недоступен).

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

Вы можете также получить сообщение:

Inaccessible here due to optimization

(Сейчас не доступна из-за оптимизации).

Это обычно означает, что переменная еще не получила значения. Как только начнут выполняться строчки кода, в которых используется наблюдаемая переменная, ее значение появится в диалоговом окне Watch List.

Добавьте в список наблюдаемых величин вашего приложения Addition переменные Value2 и Total. Для этого, вызовите диалоговое окно Watch Properties в соответствии с теми рекомендациями, что приводились выше, и введите имя переменной, за которой вы должны наблюдать (например, Value2 или Total), в поле ввода списка Expression. Затем нажмите кнопку ОК. Вы должны выполнить эти действия для каждой переменной. Теперь два раза нажмите клавишу F8 (команда Step Over), чтобы пройти оставшуюся часть процедуры и узнать значения переменных. При выполнении переменная Value1 имеет значение, которое должно быть присвоено переменной Value2, а Value2 имеет вообще какое-то странное значение, а вместо значения переменной Total выведено сообщение, в котором сказано, что эта переменная была удалена редактором связей.

Обратитесь к процедуре AddNum из листинга 6.2, и вы увидите, что значение Edit2.Text было присвоено переменной Value1, хотя оно должно было быть присвоено переменной Value2. Этот тип ошибки часто возникает в результате операций «вырезать и вставить», когда после выполнения операции вставки вы забываете изменить соответствующим образом имена переменных. По этой причине переменная Value2 так и осталась не инициализированной, и она имеет то значение, которое находилось в соответствующем месте памяти во время выполнения программы.

Теперь понятно что произошло с Value1 и Value2, но что же случилось с переменной Total? А случилось вот что. Поскольку эта переменная нигде не используется, редактор связей попросту удалил ее. Эта ситуация часто возникает при проектировании программ: вы вводите переменные, которые как вам первоначально думается, вы будете использовать. Затем, в процесс развития вашего проекта, вы решаете присваивать некое значение не промежуточной переменной, а непосредственному получателю этого значения, в нашем случае - соответствующему свойству метки. Но вы забываете npи этом вернуться назад и удалить объявление ненужной вам переменной. Эта переменная никому не мешает, но компилятор будет сообщать вам, что переменная Total не используется. А вы можете либо использовать ее когда либо потом, либо удалить ее объявление.