Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 работа с dmbs_debug  [new]
bambr
Member

Откуда:
Сообщений: 13
Привет.
в анонимной pl/sql блоке пишу команду
dbms_debug.debug_on();

выполняю, все уходит в туман (pl/sql developer зависает)

это из-за чего такое ?
11 апр 03, 09:59    [171278]     Ответить | Цитировать Сообщить модератору
 Re: работа с dmbs_debug  [new]
.dba
Member

Откуда: Киев->Мюнхен
Сообщений: 2333
дык plsql developer тоже этот пакет использует. Зачем тебе два раза?
11 апр 03, 14:17    [171901]     Ответить | Цитировать Сообщить модератору
 Re: работа с dmbs_debug  [new]
bambr
Member

Откуда:
Сообщений: 13
хочу посмотреть, какая информация об ошибках доступна при отладке заведомо неправильного sql запроса.
11 апр 03, 14:21    [171918]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: работа с dmbs_debug  [new]
Дмитрий Ш.
Member

Откуда:
Сообщений: 9
Привет, коллеги.
Чтобы не плодить новую тему, напишу здесь. Тем более, что симптомы очень похожи.

В target сессии выполняю:

SQL*Plus: Release 12.2.0.1.0 Production on Thu Dec 6 13:42:53 2018

Copyright (c) 1982, 2017, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining
and Real Application Testing options

SQL> select * from v$version;

BANNER
-------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE    11.2.0.4.0      Production
TNS for IBM/AIX RISC System/6000: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

SQL> create or replace procedure pr_debug_test
  2  is
  3  n number := 0;
  4  begin
  5      for i in 1..10
  6      loop
  7          n := n + 100;
  8          dbms_output.put_line('N='||n);
  9      end loop;
 10  end;
 11  /

Procedure created.

SQL> ALTER SESSION SET PLSQL_DEBUG = true;

Session altered.

SQL> ALTER PROCEDURE pr_debug_test COMPILE DEBUG;

Procedure altered.

SQL> SET SERVEROUTPUT ON
SQL> begin
  2      dbms_output.put_line(DBMS_DEBUG.INITIALIZE ('MISESS', 0));
  3  end;
  4  /
MISESS

PL/SQL procedure successfully completed.

SQL> select DBMS_DEBUG.SET_TIMEOUT (300) from dual;

DBMS_DEBUG.SET_TIMEOUT(300)
---------------------------
                        300

SQL> execute DBMS_DEBUG.DEBUG_ON (TRUE, FALSE);

PL/SQL procedure successfully completed.


Вызов DBMS_DEBUG.DEBUG_ON висит до timeout. В данном случае около 5 мин.

Пока висит в debug сессии выполняю:

SQL> ALTER SESSION SET PLSQL_DEBUG = true;

Session altered.

SQL> exec dbms_debug.attach_session('MISESS');

PL/SQL procedure successfully completed.

SQL> SET SERVEROUTPUT ON
SQL> DECLARE
  2      runinfo dbms_debug.runtime_info;
  3      retval binary_integer;
  4  BEGIN
  5  retval := dbms_debug.synchronize(runinfo, 0 +
  6      dbms_debug.info_getstackdepth +
  7      dbms_debug.info_getbreakpoint +
  8      dbms_debug.info_getlineinfo + 0);
  9      if retval = dbms_debug.success then
 10          dbms_output.put_line(' Sync Successful ');
 11      else
 12          dbms_output.put_line(' Sync Unsuccessful error = '|| retval);
 13      end if;
 14  END;
 15  /
Sync Successful

PL/SQL procedure successfully completed.

SQL> begin
  2   if DBMS_DEBUG.TARGET_PROGRAM_RUNNING
  3   then  dbms_output.put_line('Running');
  4   else dbms_output.put_line('Idle');
  5   end if;
  6  end;
  7  /
Running

PL/SQL procedure successfully completed.

SQL> execute DBMS_DEBUG.PING;

PL/SQL procedure successfully completed.


После того как в target-сессии закочилось выполнение DEBUG_ON в debug-сессии выполняю:

SQL> execute DBMS_DEBUG.PING;
BEGIN DBMS_DEBUG.PING; END;

*
ERROR at line 1:
ORA-06510: PL/SQL: unhandled user-defined exception
ORA-06512: at "SYS.PBREAK", line 1360
ORA-06512: at "SYS.PBRPH", line 933
ORA-06512: at "SYS.DBMS_DEBUG", line 790
ORA-06512: at line 1


SQL> DECLARE
  2      runinfo dbms_debug.runtime_info;
  3      retval binary_integer;
  4  BEGIN
  5  retval := dbms_debug.synchronize(runinfo, 0 +
  6      dbms_debug.info_getstackdepth +
  7      dbms_debug.info_getbreakpoint +
  8      dbms_debug.info_getlineinfo + 0);
  9      if retval = dbms_debug.success then
 10          dbms_output.put_line(' Sync Successful ');
 11      else
 12          dbms_output.put_line(' Sync Unsuccessful error = '|| retval);
 13      end if;
 14  END;
 15  /
Sync Unsuccessful error = 31

PL/SQL procedure successfully completed.


synchronize выполняется до timeout. Видимо, в этот момент связь между сессиями уже разорвана, и процесс debug закончился, даже не успев начаться: у меня даже не было возможности запустить свою процедуру в target-сессии.
Подскажите, что я делаю не так?

P.S. Debug средствами Toad проходит успешно.
6 дек 18, 15:25    [21755942]     Ответить | Цитировать Сообщить модератору
 Re: работа с dmbs_debug  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28467
Дмитрий Ш.
Подскажите, что я делаю не так?
Изобретаешь велосипед.
6 дек 18, 16:07    [21756025]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить