Опубликован: 25.09.2009 | Уровень: специалист | Доступ: свободно
Лекция 9:

Отладка приложения

< Лекция 8 || Лекция 9: 1234 || Лекция 10 >

Стек вызова (Call Stack)

Стек вызова представляет собой цепочку подпрограмм, которая начинается с точки вызова и заканчивается выполняющейся в настоящее время программой. Для того чтобы активировать окно стека, выполните команду Debug | Debug Windows Stack|Stack или нажмите кнопку Stack на панели инструментов Debug Console (рис. 9.12).

Окно "Стек"

Рис. 9.12. Окно "Стек"

Нажатием кнопки мы инициировали событие WHEN-BUTTON-PRESSED, которое является точкой входа в стек вызовов. Как вы сможете далее увидеть, кадры стека размещаются в порядке их вызова, то есть самый первый вызов будет находиться в нижней части стека, а последний, соответственно, будет самым первым. Название стека кадра состоит из имени модуля, события, элемента и строки вызова.

Имя_модуля.программная_единица.[имя_блока.имя_элемента]::номер_ строки

Переменные (Variables)

Окно Variables (рис. 9.13) предназначено для вывода значений переменных кадра стека. Для того чтобы активировать окно переменных, выполните команду Debug | Debug Windows | Variables или нажмите кнопку Variables на панели инструментов Debug Console.

Окно "Переменные"

Рис. 9.13. Окно "Переменные"

Как видно на рисунке, окно отражает имя, значение и тип переменных стека, а также имя текущего кадра стека в поле "Stack Frame". Чтобы понять, как вам может помочь этот раздел, нажмите кнопку += "Step Into" для вхождения в следующую точку. После перехода в новую точку останова вы увидите, как в поле "Value" отразится значение переменной, то есть 1. Вы можете изменить это значение на любое другое допустимое значение. Модифицирование переменных на этапе отладки дает вам возможность определить, как изменится поведение программы или как повлияет на результат изменение значения той или иной переменной. Исключением являются параметры, значения которых не редактируются и считаются read only. Значения всех не модифицируемых переменных подсвечиваются при попытке изменения.

Watch (Просмотр)

Для того чтобы добавить переменную в окно просмотра, выполните следующие действия:

  1. Откройте окно "Variables" или "Form Value" и выберите переменную, которую хотите добавить.
  2. Нажмите правую кнопку мыши для вызова всплывающего меню и выберите пункт "Add to Watch". После этого в окне просмотра появится выбранная вами переменная, как показано на рис. 9.14.
Окно "Watch"

Рис. 9.14. Окно "Watch"

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

  1. Откройте окно "Watch" и выберите переменную, которую хотите удалить.
  2. Вызовите всплывающее меню правым щелчком мыши и выберите пункт "Remove", после чего переменная исчезнет из списка. Чтобы очистить все окно "Watch", выберите пункт "Remove All" всплывающего меню.

Form Values (Значения формы)

Окно "Form Values" отражает значения всех элементов и параметров текущей формы. Для того чтобы активировать окно переменных, выполните команду Debug | Debug Windows | Form Values или нажмите кнопку Form Values на панели инструментов Debug Console.

Как видно на рис. 9.15, окно содержит две вкладки - "Items" и "Parameters", а также имя текущего модуля в поле "Module". Вкладка "Items" отображает значение элементов блока, а вкладка "Parameters" отображает имя параметра и его значение. Вы можете изменять значения

Окно "Form Values"

Рис. 9.15. Окно "Form Values"

элементов, если они не относятся к числу read only, для тестирования возможных вариантов поведения программы. Например, значение элемента display item нельзя модифицировать.

PL/SQL Packages (Пакеты PL/SQL)

Вы можете использовать окно "PL/SQL Packages" для просмотра выполняемого PL/SQL-пакета. В этом окне вы можете отслеживать только переменные пакета, все остальные значения, такие как возвращаемое значение функции и переменные, задействованные в методах тела пакета, будут отображены в окне переменных кадра стека DEB.SPECK_PACK.

Как показано на рис. 9.16, окно "PL/SQL Packages" состоит из двух столбцов, отображающих имя и значение переменной, и радиогруппы переключателей, управляющих отображением пакетов. Вы можете выбирать, какие пакеты отображать, а какие нет; так, например, выбирая переключатель "Client", вы получите возможность просматривать только клиентские пакеты, то есть те, которые определены непосредственно в модуле формы. Для того чтобы отобразить серверные и клиентские пакеты, нужно выбрать переключатель "All". В поле "Packages" отображается имя текущего пакета, значения переменных которого отображаются в области окна.

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

PACKAGE speck_pack IS X 
 number:=2;
 FUNCTION a 
  RETURN NUMBER; 
 END; 
 PACKAGE BODY speck_pack IS FUNCTION A 
  RETURN NUMBER IS val number; 
 BEGIN 
  val:=1+2; 
  RETURN X; 
 END; 
END;
Листинг 1. Program Unit
Окно "PL/SQL Packages"

Рис. 9.16. Окно "PL/SQL Packages"

Добавьте в триггер WHEN-BUTTON-PRESSED новую переменную для вызова функции пакета. Ниже приведен листинг триггера, в котором новые строки выделены жирным шрифтом.

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; 
 --result2:=1/0;
 :parameter.result3:=value2-value1; 
END;

Теперь для того, чтобы просмотреть значения переменных пакета во время выполнения формы в режиме отладки, повторите действия, которые мы совершали, рассматривая предыдущие примеры. Для этого запустите форму в режиме отладки, предварительно установив точки останова на операторах value1 и value2, и нажмите кнопку. После того как выполнение кода прервется на операторе value1, продолжите пошаговое выполнение программы, нажимая кнопку "Step Into" до тех пор, пока курсор не попадет на оператор :global.result1. Как только точка входа устанавливается для оператора result4, отладчик перемещает вас в программный модуль пакета и помещает в стек вызовов новый кадр, двигаясь по строкам которого, вы получаете возможность отслеживать состояние глобальных переменных пакета и операторов, задействованных в теле пакета. Заметьте, что новый кадр помещается в верхнюю часть стека.

Global/System Variables (Глобальные и системные переменные)

Используйте окно "Global/System Variables" для просмотра значений переменных командной строки, системных и глобальных переменных. Как показано на рис. 9.17, окно "Global/System Variables" состоит из трех вкладок - Global, System и Command Line.

Для того чтобы просмотреть значение глобальной переменной, нажимайте кнопку "Step Into" до тех пор, пока курсор не покинет оператор :global.result1. Значения глобальных переменных можно изменять, а вот значения переменных Command Line изменять нельзя, так как все они имеют статус read only. Все системные переменные за исключением четырех также имеют статус read only. Системные переменные DATE_ TREASHOLD, EFFECTIVE_DATE, MESSAGE_LEVEL и SUPRESS_ WORKING являются теми самыми исключениями, значения которых можно изменять.

Окно "Global/System Variables"

Рис. 9.17. Окно "Global/System Variables"
< Лекция 8 || Лекция 9: 1234 || Лекция 10 >
Константин Лукин
Константин Лукин

ошибка: FRM47337  Tree node label can not be null

при выполнении скрипта

DECLARE
 Itree ITEM;
 top_node Ftree.Node;
 new_node Ftree.Node;
 i_value VARCHAR2(30);
BEGIN
 Itree := Find_Item('tree_block.tree_item ');
 new_node := Ftree.Add_Tree_Node(Itree, Ftree.ROOT_NODE,
   Ftree.PARENT_OFFSET, Ftree.LAST_CHILD,
   Ftree.EXPANDED_NODE, i_value, NULL, i_value);
END;

Юлия Малыгина
Юлия Малыгина
приведена функция скрытия URL отчета и ее применение, но применения так и нет
Жанбек Сарсенов
Жанбек Сарсенов
Россия, Москва, Московский Государственный Университет имени Ломоносова М.В., 2002