Войти
 
 
   
 
  
Новости Notes.ру Библиотека Биржа труда Вопрос - ответ Форум Регистрация Поиск О проекте
Разделы
О Notes
Советы
Шаблоны и примеры
Литература
Презентации
 
Всё о задаче AdminP. Часть вторая   Во второй части мы завершаем рассмотрение AdminP. В ней рассмотрены запросы междоменного администрирования и способы управления функциями AdminP с помощью настроек документа сервера, команд консоли сервера, файла Notes.ini и интервалов очистки базы данных. В этой статье предполагается, что вы опытный администратор Domino и прочитали первую часть
О Notes Читать статью
 
Всё о задаче AdminP. Proxy-действия в R5 и Domino 6   Приложение к статье об административном процессе
О Notes Читать статью
 
Всё о задаче AdminP. Часть первая   Перевод классической статьи 2003-его года о задаче административного процесса (AdminP). Очень полезна для понимания работы механизма этой задачи. В первой части статьи описаны компоненты задачи AdminP, как они работают, и как их использование помогает сделать работу администратора Domino проще. Задача AdminP (сакращённо от Administration Process, Административный процесс) работает с базой административных запросов (Administration Requests, admin4.nsf)
О Notes Читать статью
 


О Notes

Главная   Библиотека   О Notes

Отладка кода LotusScript.

Николай Норкин
Вятские Информационные Технологии, Киров
Вы никак не можете понять, почему код, взятый целиком из учебника, заканчивает свою работу сообщением об ошибке. Почему результат обработки действия пользователя расходится с заложенной в программный код логикой. Почему работающий на Вашем компьютере код не работает у Вашего шефа. Это значит, что пришло время отладки программного кода

Основной инструмент в арсенале разработчика для отладки кода - отладчик LotusScript. Запустить его можно с помощью меню клиента Notes File -> Tools -> Debug LotusScript (Файл -> Сервис -> Отладчик LotusScript). Отладчик начнет работу для всех вновь открываемых баз данных, представлений и документов. При его помощи в большинстве случаев можно быстро локализовать ошибку, что, в свою очередь, поможет быстро ее осознать и исправить

Панель отладчика
При попытке открыть документ или запустить агент (отладчик должнен быть уже запущен) Вы увидите появление нового окна. Окно отладчика разделено по горизонтали на две панели: панель кода (скрипта) и панель утилит.


Рис.1. Окно отладчика LotusScript

В верхней части панели кода расположены кнопки действий, позволяющие продолжить или прервать выполнение кода. Строкой ниже - два выпадающих списка, содержащие перечень событий и подпрограмм всех элементов дизайна, размещенных в отлаживаемом объекте (в том числе, события и подпрограммы, присущие самому объекту).

Рис.2. Выпадающие списки с перечнем событий и подпрограмм

Ниже в окне - код выбранного события (подпрограммы). Следующая обрабатываемая в процессе отладки строка отмечена желтой стрелкой. Этот указатель будет преследовать Вас при пошаговой отладке кода, останавливаясь на каждой строке, которая на текущий момент становится "следующей обрабатываемой". Второй курсор - синяя (в стандартной палитре Windows) подсвеченная строка, - сопроводит разработчика при прокрутке кода приложения с помощью клавиатуры и поможет расставить точки останова.

Рис.3. Окно кода приложения

Под окном кода расположено выпадающее окно со списком процедур, последовательно вызванных одна из другой до той, в которой остановлен отладчик в настоящий момент. (В отладчике LotusScript версии R6 этот выпадающий список заменен еще одной закладкой на панели утилит). Если отлаживаемый код невелик, можно пройти его шаг за шагом, используя кнопки действий Step Into, Step Over и Step Exit (Войти, Обойти и Выйти). При более объемном коде повысить эффективность процесса отладки сможет работа с точками останова (Breakpoints)

Точки останова
Цель использования данного механизма отладки - приостановить выполнение кода LotusScript в "подозрительном" фрагменте программы, не утомляя разработчика пошаговыми переходами в уже отлаженных частях программы.После размещения точек останова можно продолжить исполнение программного кода в автоматическом режиме, нажав кнопку действия Continue (Далее). Выполнение кода будет продолжено до наступления одного из трех событий:
  • Завершения обработки кода
  • Ошибки исполнения (run-time ошибки)
  • Достижения точки останова
Для создания точек останова в режиме отладки программного кода нужно:
  • воспользоваться командой Главного меню Debug -> Add Breakpoint (Отладка -> Создать точку останова) для размещения точки останова на текущей "прокручиваемой" строке (подсвеченная строка)
  • тот же эффект производит использование функциональной клавиши F9
  • или выполнить "двойной щелчок" левой кнопкой мыши на строке кода, в которой размещается точка останова
Для создания точки останова необходимо, чтобы соответствующая строка содержала исполняемый код. В строках, содержащих исключительно комментарии или объявления переменных, подпрограмм и констант, отладчик разместить точку останова не позволит.
Графически точка останова отображается красным кружком. Точка останова имеет три состояния: включена, дезактивирована (отключена), снята (не установлена). Повторным двойным щелчком мыши пользователь переводит точку останова в состояние дезактивирована, что сопровождается графическим изображением перечеркнутого красного кружка (точки останова). С одной стороны, это состояние позволит быстро перейти к нужному фрагменту кода (точке останова), с другой - выполнение кода не будет прерываться в этом месте, как это случилось бы в случае активной точки останова, что позволит не отвлекать внимание разработчика во время отладки другого фрагмента кода. Следующим двойным щелчком мыши точка останова удаляется (снимается). Для работы с точками останова можно использовать также соответствующие команды главного меню, сгруппированные в пункте меню

Директива Stop
Другая разновидность точки останова, применяемая в процессе отладки кода, - программируемая "точка останова", задаваемая оператором языка LotusScript Stop. При выключенном отладчике данный оператор игнорируется, при включенном режиме отладки ведет себя как "активная" точка останова. Размещение "точки останова" прямо в фрагменте программного кода, возможно содержащего ошибку, избавляет разработчика от выискивания нужного фрагмента и установки точки останова вручную. Еще один случай использования директивы Stop - отладчик LotusScript не всегда останавливает исполнение кода на первом операторе при выполнении некоторых событий. Например, при открытии документа отладчик "пролистнет" без остановки обработку события QueryOpen, если в представлении выполнялась обработка события QueryOpenDocument. Такая же тенденция к "пролистыванию" есть и при обработке событий PostOpen, PostModeChange и т.д. В данном случае неоценимую услугу окажет размещение оператора Stop в начале кода обработчика событий
Недостаток оператора Stop - это, прежде всего, трудность с его дезактивированием в процессе отладки. Второй недостаток - отсутствие в списке точек останова, что влечет с собой сложности для поиска его в процессе отладки.

Кнопки действий

Рис.4. Кнопки панели действий

Кнопка Continue (Далее) продолжает выполнение кода до:
  • его завершения,
  • run-time ошибки
  • или активной точки останова
Кнопка Step Into (Войти) выполняет следующую строку кода. Если в строке содержится вызов пользовательской подпрограммы, отладчик останавливается перед первой исполняемой строкой подпрограммы
Кнопка Step Over (Обойти) - отладчик выполняет следующую строку кода. Если в строке содержится вызов пользовательской подпрограммы, подпрограмма исполняется полностью без отладки, кроме тех случаев, когда внутри подпрограммы встречается точка останова или происходит ошибка исполнения
Кнопка Step Exit (Выйти) - отладчик выполняет подпрограмму, в которой происходит отладка, до выхода из подпрограммы и останавливается на следующей исполняемой строке подпрограммы, из которой произошел вызов текущей отлаживаемой подпрограммы. И в данном случае исполнению могут помешать размещенные точки останова или ошибка
Кнопка Stop (Стоп) прерывает процесс отладки и закрывает окно отладчика

Панель утилит
Панель утилит разбита на закладки Breakpoints (Точки останова), Variables (Переменные), Output (Вывод) и, для R6, Calls (Вызовы)
Наиболее применима в процессе отладки закладка, описывающая текущее состояние объектов программы - закладка Variables

Рис.5. Закладка Variables панели утилит

Информация о переменных разделена на три столбца: имя переменной, значение переменной и ее тип. В случае, когда переменные имеют простой тип (число, строка и т.п), при объявлении их в коде программы происходит инициализация (значения числовых переменных устанавливаются равными нулю (0), строковых - пустой строке ("")). Разработчику остается проверять соответствие текущего значения переменной ее ожидаемому значению. Иначе обстоят дела с переменными типа Variant и объектами классов

Переменные типа Variant
Во-первых, переменные ни того, ни другого типов при объявлении не инициализируются (по умолчанию). В окне списка переменных этот факт отражается отсутствием значения переменной во втором столбце. Для переменных типа Variant, это значение трактуется как Empty (пусто). Для проверки этого состояния в языке LotusScript существует функция IsEmpty. При работе с переменной типа Variant может возникнуть ошибка несоответствия типов данных, которая не отслеживается в процессе компиляции кода, но проявляется во время исполнения. Еще одна частая причина ошибок - использование переменной типа Variant для работы с массивами объектов. В отладчике на закладке Variables переменные, содержащие массив, отображаются в виде разворачиваемой строки заголовка, где значение переменной показывает, насколько возможно из-за ограничения длины строки на экране, значения элементов массива через запятую. Щелчок мыши по значку развертки слева от строки позволяет просмотреть значение каждого элемента массива в отдельной строке.

Переменные-объекты
При внешнем сходстве значений неинициализированных переменных типа Variant и переменных объектов в списке переменных, неинициализированные объекты классов имеют своим значением ссылку на специальную область памяти Nothing (ничего). Для проверки данного состояния объекта в программном коде LotusScript используется оператор Is обычно в следующей конструкции:
If <объект> Is Nothing Then ...
Для инициализированного объекта в списке переменных отладчика отображаются все свойства, присущие объекту. При этом разработчик, привыкший использовать расширенный синтаксис при работе с полями документа (выражения вида document.имя_поля), найдет все поля документа в свойстве Items объекта класса NotesDocument

Рис.6. Объект Document класса NotesDocument. Среди свойств видно содержимое свойства Items. Значение поля(NotesItem) Indicator представляет собой массив из одного элемента

Изменение значений переменных
При отладке кода LotusScript разработчик может не только пассивно наблюдать за работой программы, но и изменять значения простых переменных, элементов массива, свойств объектов, выраженных простыми переменными. Эта операция производится над выделенной переменной в строке, расположенной ниже списка переменных. Одним из возможных сценариев отладки в этом случае может стать посылка: "Что произойдет, когда данный параметр будет иметь такое значение".

Рис.7. Чтобы нарушить логику работы приложения, достаточно изменить значение одной из переменных

Данная возможность доступна любому пользователю, работающему в клиенте Notes, что теоретически позволяет нарушить логику приложения. Во избежание этого, автор рекомендует закрывать дизайн отлаженных приложений и все дальнейшие изменения производить в соответствующем шаблоне. (Это не единственный вариант защиты кода приложения, материал на эту тему планируется в ноябре - Notesnet.ru)

Ограничения на применение отладчика
Отладчик LotusScript, об использовании которого речь шла в настоящем материале, поможет разработчику в большинстве случаев, но к сожалению, имеются и исключения.
С его помощью невозможно произвести отладку диалоговых окон (интерфейсных элементов, создаваемых приложением при помощи функции @DialogBox и метода DialogBox класса NotesUIWorkspace), при этом появляется окно-предупрежение.

Рис.8. Окно с предупреждением о невозможности отладки диалоговых окон.

Подобное окно появляется перед пользователем, когда работа с объектом происходит в наборе фреймов (frameset). К сожалению, автор не может сказать, насколько существенно предупреждение в данном случае: игнорирует ли инструмент возможность отладки кода объекта, или отладка объекта происходит, а предупреждение относится непосредственно к набору фреймов.
Определенные проблемы вызывает также и отладка кода, в котором имеется контекстная зависимость от текущего элемента интерфейса (к примеру, notesUIDocument.CurrentField и подобные ему) ввиду того, что курсор, попадая в окно отладчика, может потерять этот самый контекст.
Еще одно ограничение на применение отладчика - это невозможность его использования для отладки кода агентов, исполняемых на сервере, к которым относятся:
  • событийные агенты и агенты по расписанию
  • агенты, запускаемые при помощи метода RunOnServer
  • агенты Web-приложений
Следует отметить появление в шестой версии продукта возможности удаленной отладки серверных агентов, но этот аспект, надеюсь, станет предметом другого материала. В пятой версии можно, конечно, произвести отладку кода агента, запустив его на станции, но отладку приложения в тех условиях, в каких тому придется реально работать, следует производить другими методами.

Читайте также на Notesnet.ru:
Как добиться качественного кода (перейти >>>)
Скрытый дизайн БД - "вскрытие" (перейти >>>)
 
  Опубликовано — 10/15/2003 |    



Добавить комментарий
Имя * :
e-mail
Комментарий * :
Код подтверждения * :

Мероприятия
Пресс-релизы
Биржа труда
Последнее на форуме
 
А так же:
Как удалить профиль?
16.04.2016 00:08:51
Скопировать в буфер поле документа
24.05.2015 08:55:52
Импорт DXL-описания документов в Lotus Domino. Одноимённые поля
16.04.2015 16:49:58
 
© LOGOSPHERE.RU