ошибка: FRM47337 Tree node label can not be null при выполнении скрипта DECLARE |
Отладка приложения
Breakpoints (Точки останова)
Окно "Breakpoints" позволяет не только видеть установленные точки останова, но и управлять ими.
Как показано на рис. 9.18, вкладка "Breakpoints" отображает три столбца: Source, Enable и Line. Значение, приведенное в столбце "Line", указывает на номер строки, на которой установлена точка останова. Столбец "Source" - это локация точки останова. Вы можете управлять точками останова, делать их активными или неактивными, сбрасывая флаг выключателя. Если флажок сброшен, то точка останова считается неактивной и имеет серый цвет.
Вкладка "Break On Exceptions" отображает типичные исключительные ситуации, которые могут возникнуть в вашем приложении. Вкладка имеет три столбца, первый из которых позволяет включить или выключить исключительную ситуацию на выбранной точке останова (рис. 9.19). Столбец "Number" отображает код ошибки для исключительной ситуации столбца "Exception Name".
Для того чтобы понять, как установить флажок и вывести на экран сообщение, показанное на рисунке, требуется выбрать точку останова, а затем, перейдя на вкладку "Break On Exceptions", установить флажок на исключительной ситуации с названием "ZERO_DIVIDE". Теперь, когда вы выполнили вышеописанные действия, попробуйте снова пошагово проанализировать код, и вы увидите, что после того как точка входа пре-
рывания покинет оператор, возбуждающий исключительную ситуацию, на экран выводится сообщение. Чтобы не отслеживать такого рода ошибки, используйте конструкцию EXCEPTION.
Использование пакета Debug
Вы также можете управлять отладкой программно, используя встроенный пакет Debug. Рассмотрим некоторые функции этого пакета на конкретных примерах. Для того чтобы установить точку останова программно, добавьте в ваш код строки, приведенные в листинге. Новые строки выделены жирным шрифтом.
WHEN-BUTTON-PRESSED DECLARE value1 number; value2 number; result1 number; result2 number; result4 number; BEGIN value1:=1; value2:=2; result4:=speck_pack.a; :global.result1:=value1+value2; IF Debug.Getn(value2) > 0 THEN raise Debug.Break; :parameter.result3:=value2-value1; END;
В этом случае, если значение переменой value2 окажется большим 0, выполнится прерывание.
Используя процедуру Attach (рис. 9.20) пакета Debug, вы можете перевести форму из нормального режима в режим отладки. После того как вы запустите форму в обычном режиме, нажмите кнопку, и на экране появится сообщение с описанием дальнейших действий.
WHEN-BUTTON-PRESSED DECLARE value1 number; value2 number; BEGIN value1:=1; value2:=2; DEBUG.ATTACH; :global.result1:=value1+value2; :parameter.result3:=value2-value1; END;
Для того чтобы активизировать отладку, выберите пункт главного меню Debug | Attach Debug. В появившемся окне "Attach Debug to" (рис. 9.21) введите имя хоста и номер порта, после чего подтвердите свои действия.
Вы можете передать выполнение кода отладчику, подобно тому, как это делает точка останова, используя процедуру Suspend пакета Debug (рис. 9.22).
Управление отладкой
Когда мы нажимали кнопку "Step Into", мы переходили к выполнению следующей строки кода, то есть отлаживали код построчно. Помимо кнопки "Step Into" на панели инструментов Debug имеется еще несколько кнопок для управления ходом отладки. Вы можете воспользоваться пунктами меню Debug (рис. 9.23), действия которых идентичны кнопкам панели управления.
- Step Into - шаг внутрь, выполняет следующую строку программы. Построчная отладка полезна в тех случаях, когда вы хотите индивидуально отследить значение каждой строки и попасть в вызываемые подпрограммы.
- Step Over - пропустить, выполняет следующую строку программы, пропуская при этом вызываемые подпрограммы, что позволяет выполнить подпрограмму, при этом не выполняя ни одной ее строки. Это существенно сокращает время по сравнению с предыдущей командой, так как в программе с большим количеством подпрограмм иногда приходится долго ходить по строкам кода.
- Step Out - выйти, после выполнения подпрограммы возвращает управление отладчику, останавливаясь в месте вызова подпрограммы. Это действие поможет вам завершить пошаговое выполнение программы.
- Go - продолжить, выполняет следующую точку останова. После того как все точки останова будут пройдены, нормальное выполнение формы будет возобновлено.
- Pause - пауза, устанавливает небольшой интервал, после чего снова передает управление отладчику.
- Stop - остановить, выходит из формы, завершая работу отладчика.