FoxBase!
msgbartop
Блог Oracle разработчика
msgbarbottom
foxbase

16.10.2009 Отладка кода в Oracle

В этой статье предлагается простой и эффективный способ отладки серверной и клиентской частей приложений Oracle. Способ не претендует на полноту и не призван заменить собой известные способы отладки, однако может быть полезен при отладке бизнес логики приложений.
Этот способ отладки основан на установке простых точек отладки без остановки выполнения приложений. В каждом случае в требуемом месте кода приложения вызывается специальная процедура, в качестве параметра которой передается строка с данными отладки. Строка формируется разработчиком исходя из потребностей отладки и конкретной ситуации.
Для использования этого способа отладки предлагается создать простую таблицу базы данных и процедуру отладки. Эти объекты можно оформить в виде компоненты ядра системы. Таблица имеет следующую структуру:

CREATE TABLE CORE_DEBUG
(ID     NUMBER(16),
 CREATED    DATE            DEFAULT SYSDATE NOT NULL,
 CREATED_BY VARCHAR2(30)    DEFAULT USER    NOT NULL,
 DATA       VARCHAR2(4000)
);

COMMENT ON TABLE  CORE_DEBUG            IS ‘Debug info’;
COMMENT ON column CORE_DEBUG.ID         IS ‘ID’;
COMMENT ON column CORE_DEBUG.CREATED    ISDATE/TIME;
COMMENT ON column CORE_DEBUG.CREATED_BY ISUSER name’;
COMMENT ON column CORE_DEBUG.DATA       IS ‘Debug data’;

ALTER TABLE CORE_DEBUG
add constraint PK_CORE_DEBUG
primary key (ID)
using INDEX PCTFREE 0;

CREATE sequence CORE_DEBUG_SEQ;
Для записи отладочной информации в таблицу создадим процедуру

CREATE OR REPLACE
PROCEDURE DBG(psDATA IN VARCHAR2)
IS
  PRAGMA autonomous_transaction;
BEGIN
  INSERT
    INTO CORE_DEBUG (ID, DATA)
  VALUES (CORE_DEBUG_SEQ.NEXTVAL,psDATA);
  COMMIT;
END;
/
Для очистки таблицы  с отладочной информацией также создадим процедуру:

CREATE OR REPLACE
PROCEDURE DBG_DEL
IS
  PRAGMA autonomous_transaction;
BEGIN
  DELETE CORE_DEBUG
   WHERE CREATED_BY=USER;
  COMMIT;
END;
/
После создания этих объектов можно заниматься отладкой кода. Например, у нас есть некоторая серверная процедура, в которой необходимо узнать в определенный момент значения переменных X и Y. В необходимом месте процедуры записываем такую строчку кода:

DBG(’X:||X||, Y:||Y);
Далее запускаем отлаживаемую процедуру, затем смотрим результаты, выполнив простой запрос:

  SELECT *
    FROM CORE_DEBUG
   WHERE CREATED_BY=USER
   ORDER BY ID;
В результате видим значения интересующих нас переменных.
При необходимости узнать значения переменных в клиентских формах или факт выполнения того или иного участка кода, также формируем требуемые вызовы из клиентских форм процедуры CORE_DEBUG.
Отладочная информация записывается с именем пользователя, который формирует вызов CORE_DEBUG. Следовательно, использовать таблицу могут одновременно несколько разработчиков. Для удаления всей отладочной информации текущего пользователя используем вызов процедуры DBG_DEL.
Процедуры DBG и DBG_DEL работают в автономных транзакциях, запись или удаление отладочной информации произойдет гарантировано, и не будет влиять на результаты текущей транзакции, в которой выполняется отлаживаемый код.
Для просмотра и удаления результатов отладки можно сделать отдельную форму, если так будет удобнее.

 www.foxbase.ru



Смотрите также:



Оставьте свой комментарий

Вы должны быть авторизированны, чтобы оставить комментарий.