Если
вам надоела тема отладки, потерпите немного...
18.3 Окно
наблюдения Watches
Мастер оценки выражений, конечно, хороший инструмент, но он даёт значения только
отдельных переменных, а в сложных приложениях вам надо бы иметь перед глазами
значения нескольких переменных сразу, чтобы из их сравнения понять причины
неправильной работы. Такую возможность предоставляет вам окно наблюдения Watches.
Сделать его видимым можно командой View | Debug Windows | Watches.
Соответствующую команду можно также выбрать из контекстного меню всплывающего
при щелчке правой кнопкой в окне Редактора Кода. Но всего этого даже не надо
делать. Достаточно подвести курсор в коде к интересующей вас переменной и нажать
Ctrl-F5. При этом окно наблюдения автоматически откроется и в нём появится имя
переменной и ее значение. Затем вы можете подвести курсор к другой переменной,
опять нажать Ctrl-F5 и в окне наблюдения появится новая строка. Более того, вы
можете выделить курсором какое-то выражение, нажать OH-F5 и в окне наблюдения
увидеть значение этого выражения. Если окно Watches уже открыто, то можно
поступить еще проще: выделить в окне Редактора Кода интересующее вас выражение и
перетащить его мышью в окна Watches.
Хотя, как говорилось в предыдущем разделе, в нашем примере смотреть особенно
нечего и все достоинства окна наблюдений вы сможете оценить только при пошаговом
выполнении, остановимся на различных особенностях этого окна.
Индикаторы около наблюдаемых величин (они введены только в Delphi 7) позволяют
отключать вывод в окно наблюдения соответствующего выражения во время выполнения
приложения. Это повышает производительность выполнения. А после того, как
приложение остановлено, и вам надо все-таки посмотреть данное выражение в окне
наблюдения, можете включить индикатор и увидеть значение наблюдаемой величины.
Иногда вы можете не увидеть в окне значения каких-то заказанных вами переменных,
а получить сообщение: "Variable ... inaccessible here due to optimisation". Это
следствие работы оптимизирующего компилятора, который может по своему усмотрению
распоряжаться некоторыми переменными программы и хранить их не в памяти, а в
быстрых регистрах системы. Таким образом обеспечивается белее быстрое выполнение
приложения. Спорить с оптимизатором не стоит, так как он знает, как создавать
эффективные программы. В подобных случаях надо просто на время отладки отключить
оптимизацию ,— выключить флажок Optimization страницы Compiler окна Project
Options, которое вы можете вызвать командой Project | Options. Только не
забудьте после выключения оптимизации выполнить команду Project | Build Project,
чтобы перекомпилировать проект с новой опцией. А после завершения отладки надо
снова в окончательном варианте включить оптимизацию и перекомпилировать проект,
чтобы повысить эффективность вашего приложения.
Другая ошибка наблюдения может появиться в случае, если вы хотите наблюдать
выражение, содержащее какие-то функции. По умолчанию вызов функций из окна
наблюдения запрещён. Но это запрещение можно отменить. Перейдите в окно
наблюдения, выделите в нем нужную строку и нажмите клавиши Ctrl-F5. Вы попадаете
в окно задания списка наблюдения Watch Properties. В то же окно выводит двойной
щелчок на строке окна наблюдения или команда Run | Add.
В окне Watch Properties вы можете написать в окошке Expression любое выражение
содержащее переменные, константы, функции. Окошко Repeat count используется при
наблюдении массивов и позволяет задать число наблюдаемых элементов массива. Окно
Digits определяет число выводимых значащих разрядов чисел с плавающей запятой.
Индикатор Enabled позволяет отключить вывод в окно наблюдения соответствующего
выражения во время выполнения приложения, т.е. в Delphi 7 дублирует индикаторы.
А в предшествующих версиях Delphi это единственный механизм отключения и
включения вывода.
Индикатор Allow Function Calls разрешает включать в окно наблюдения выражения,
содержащие вызовы функций. Попытайтесь в нашем примере ввести в окно наблюдения
выражение FloatToStr(A). Вы получите замечание «Inaccessible value» —
недоступная величина. Но если вы сделаете двойной щелчок на этом выражении в
окне наблюдения и в появившемся окне Watch Properties установите индикатор Allow
Function Calls, сообщение об ошибке исчезнет, и результат выражения станет
нормально отображаться. Можно поступить иначе: выполнить команду Tools |
Debugger Options и в появившемся многостраничном диалоговом окне на странице
General установить опцию Allow function calls in new watches. Тогда всегда все
новые выражения, добавляемые в окно наблюдения, будут допускать вызовы функций.
Радиокнопки в нижней части окна Watch Properties задают формат вывода значения
переменной или выражения. А выпадающий список вверху позволяет выбрать выражение
из тех, которые использовались ранее, и при необходимости отредактировать его.
Это удобно, если надо выводить в окно наблюдений похожие выражения. Например,
если вам надо вывести значение Label1.Caption, Label2.Caption и Label3.Caption,
то достаточно один раз написать это выражение, а в дальнейшем брать его из
выпадающего списка и только менять в нем цифру.
Начиная с Delphi 7, в окне Watch Properties введен выпадающий список Group name
— имя группы. По умолчанию создается одна группа — Watches. Но вы можете разбить
наблюдаемые величины на несколько групп (страниц). Для задания новой группы в
контекстном меню окна наблюдения Watch List надо выбрать раздел Add Group и
указать имя новой группы. Тогда в окне наблюдения появится новая страница, и вы
сможете заносить на неё новые наблюдаемые величины, выбирая в окне Watch
Properties в списке Group name соответствующее имя. Вы можете также перемещать в
новую группу какие-то из введенных ранее наблюдаемых величин, пользуясь командой
Move Watch to Group контекстного меню окна наблюдений.
Разбиение наблюдаемых величин на несколько групп очень удобно при отладке
сложных проектов, в которых в различных ситуациях надо просматривать различные
наборы переменных.
В заключение посмотрим, как можно редактировать список выражений в окне
наблюдения. Удалить какое-то выражение из этого списка можно просто выделив
требуемое выражение и нажав Delete. Отредактировать ошибочное выражение можно,
сделав на нём двойной щелчок, после чего вы окажетесь в окне Watch Properties и
можете заниматься редактированием.
Сайт
рассылки http://mydelphi7.narod.ru,
на котором есть архив рассылки, также гостевая книга, переводчик.
Копировать, размещать, продавать представленную информацию
запрещается.