Анимация
JavaScript


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

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 [ 132 ] 133 134 135 136 137 138 139 140 141 142 143 144 145 146

±V

LPARAHETERS Button. nShift. nffCoerd. nVCoord

IF nQutton

&й L«ft Houe*

IF flBSinJiCoord - ГН1?. Parent. M(iu•вX) У THIS. Paren t . QragHold OR ;

(iES(nVCDord - THI3.Parent.MDUseV) У THIS. Parent . DragHold THIS.Crag EHDIF ENDIF


Рис. 12.2.

1. 2.

Откройте окно Debug.

Наберите в его левой части строку типа PROGRAM()="MOUSEMOVE", в которой необходимо указать имя события или метода, код которого вас интересует. Установите на разделительной линейке точку останова. Откройте окно Trace.

С помощью меню Do окна Trace запустите нужную форму.

При выполнении события MouseMove окно Trace будет активизироваться и вы сможете просматривать код или задавать его пошаговое выполнение.

Эффективность отладки в Visual FoxPro, особенно могут повысить следующие команды.

в период опытной эксплуатации программы,

SET ALTERNATE TO [FileName [ADDITIVE]]

Создает на диске текстовый файл с именем FileName (по умолчанию pасшиpение TXT), в котоpом дублиpуются pезультаты выполнения всех команд, кpоме полноэкpанных, что позволяет контpолиpовать пpоцесс pаботы пpогpаммы даже без пpисутствия pазpаботчика (в пеpиод опытной эксплуатации) и опpеделять пpичины сбоя или непpавильных действий опеpатоpа. Конечно, эта пpоцедуpа тpебует достаточного дискового пpостpанства и несколько замедляет pаботу пpогpаммы. Без паpаметpов команда закpывает текущий альтеpнативный файл. С опцией ADDITIVE добавляет данные в файл, в пpотивном случае его содеpжимое пеpезаписывается.

SET ALTERNATE on OFF

Включает (ON) или выключает (OFF) pежим записи данных в альтеpнативный файл.

ON ERROR [Command]

Устанавливает режим ожидания для ошибочных ситуаций во время работы программы. В случае возникновения ошибки выполняется указанная команда. Как правило, это команда запуска специальной процедуры обработки ошибок.

Без аргумента команда восстанавливает режим обработки ошибочных ситуаций Visual FoxPro. При возникновении ошибки Visual FoxPro приостанавливает работу программы и при наличии исходного кода выводит на экран окно Trace, в котором строка кода, вызвавшего ошибку, выделена. Очевидно, что даже в отлично отлаженной программе могут возникать ошибочные ситуации хотя бы по внешним причинам, связанным со случайным удалением файлов и т. д. Поэтому любая пользовательская программа должна иметь специальный блок обработки ошибок, основу которого и будет составлять команда ON ERROR. Пример такой программы мы приведем в конце этого параграфа, а логика, которая должна быть заложена в блок обработки ошибок, демонстрируется на рис. 12.3.



Запуск программы

ON ERROR..

RETRY

Ошибочное действие

ncvqnpprpgMiLia обработки ошибок

Исправить ошибку невозможно

Завершение работы программы

Рис. 12.3.

В Visual FoxPro мы можем расширить возможности обработки ошибок за счет использования локальной идентификации каких-либо специфических ошибок, возникающих при выполнении тех или иных действий. Например, в форме мы можем обработать ошибочные ситуации, возникающие при выполнении каких-либо методов, без обращения к установке ON ERROR, то есть внутри формы. Для этого можно использовать событие Error.

PROCEDURE Object.Error

LPARAMETERS [nIndex,] nError, cMethod, nLine

Параметр nIndex позволяет сослаться на элемент управления по его номеру в массиве элементов управления объекта-контейнера (формы). Параметр nError содержит номер ошибки Visual FoxPro, cMethod - имя метода, который вызвал ошибку, nLine - номер строки внутри метода или определяемой пользователем функции, которая вызвала ошибку.

В то же время, если при обработке ошибки в процедуре обработки события Error возникнет еще одна ошибка, Visual FoxPro вызовет обработчик, указанный в установке ON ERROR, или, если такой обработчик не указан, приостановит выполнение программы.

Например, мы можем в событие Error формы записать код, который будет выполняться, если невозможно открыть связанные с формой таблицы, так как администратор БД проводит переиндексацию файлов:

LPARAMETERS nError, cMethod, nLine

* Ошибка "File in use by another" IF nError = 108

= MESSAGEBOX("Данные не доступны! " + ; "Попробуйте открыть форму позднее.")

ELSE

* В случае другой ошибки вызываем общую процедуру

* обработки ошибок, установленную в главной программе DO proc error

ENDIF

Если вы определяете локальную процедуру обработки ошибок для класса, то при использовании в пользовательском приложении объектов, основанных на этом классе, заданная процедура будет автоматически в нем задействована. Причем эта процедура обработки ошибок будет автоматически наследоваться в подклассах, основанных на этом классе. Следует иметь в виду, что если вы используете в форме какие-либо элементы управления, для которых в событии Error обработка ошибок не предусмотрена, то событие Error для формы вызвано не будет. В этом плане использование установки ON ERROR более универсально, так как она будет обработана не зависимо от места возникновения ошибки.



Проверить реакцию программы обработки ошибок можно, искусственно создав ошибочную ситуацию с помощью команды

ERROR nErrorNumber nErrorNumber, cMessageTextl [cMessageTextl]

которая генерирует ошибку Visual FoxPro. Параметр nErrorNumber определяет номер ошибки, который используется для воспроизведения стандартного сообщения Visual FoxPro. Параметр cMessageTextl задает текст, появляющийся в сообщении об ошибке, который может содержать дополнительную информацию. Например, если вы ссылаетесь на переменную, которой не существует, Visual FoxPro может вывести имя этой переменной в сообщении об ошибке. Параметр cMessageTextl определяет текст, отображаемый в сообщении об ошибке. Когда вместо параметра nErrorNumber в команде задается параметр cMessageTextl, будет сгенерирована ошибка Visual FoxPro с номером 1098 (определяемая пользователем ошибка). Чтобы переместить часть сообщения об ошибке на следующую строку, используйте в cMessageTextl символ возврата каретки CHR(13).

Команда ERROR может использоваться помимо проверки программы обработки ошибок для того, чтобы показать особые сообщения об ошибках. Если действует установка ON ERROR, то при выполнении команды ERROR Visual FoxPro выполняет процедуру обработки ошибок, определяемую в установке ON ERROR. Если происходит ошибка для объекта, будет выполнено событие Error для этого объекта.

Если вы задаете команду ERROR из окна Command и установка ON ERROR не действует, Visual FoxPro показывает сообщение об ошибке. Если команда ERROR выдана в программе и установка ON ERROR также не действует, Visual FoxPro выводит сообщение об ошибке и разрешает вам закончить или приостановить программу, либо игнорировать ошибку.

Например, чтобы задать появление ошибки Visual FoxPro номер 12, напишем следующую команду в требуемом месте программы:

ERROR 12

Появится сообщение об ошибке "Variable not found" ("Переменная не найдена"). Если задать эту команду в следующем виде:

ERROR 12, nVar1

появится сообщение об ошибке "Variable nVar1 not found" ("Переменная nVar1 не найдена").

Для получения более обширной информации при отладке пpогpаммы можно использовать следующие функции.

AERRO R(ArrayName)

Создает массив, содержащий информацию относительно самой последней ошибки Visual FoxPro, OLE или ODBC. Параметр ArrayName определяет имя создаваемого массива. Функция AERROR() создает массив с шестью столбцами и возвращает число строк в массиве, которое определяется типом ошибки. Следующий список описывает содержание каждого элемента массива:

Номер Описание

элемента

1 Числовой. Содержит номер ошибки. Идентичен значению, возвращаемому функцией ERROR().

2 Символьный. Текст сообщения об ошибке. Идентичен значению, возвращаемому функцией MESSAGE().

3 Значение NULL. Если ошибка имеет дополнительный параметр, содержит текст параметра ошибки. Идентичен значению, возвращаемому функцией SYS(2018).

4 Значение NULL. Однако, как и в



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 [ 132 ] 133 134 135 136 137 138 139 140 141 142 143 144 145 146