调试Oracle PL/SQL WEB应用程序会挂起浏览器和开发工具



我是PL/SQL的新手,被指派维护一个PL/SQL系统,该系统使用PL/SQL生成的WEB页面作为前端(PL/SQL WEB应用程序?)。由于应用程序的复杂性,我正试图让Oracle Developer Tools for Visual Studio(11.2.0.3.15)或Oracle的SQL Developer的调试器正常工作。

我无法从开发环境中启动应用程序,因此我使用DBMS_DEBUG_JDWP.CONNECT_TCP('10.15.1.177','4000')和DBMS_DEBUG_JDWP.DISCONNECT()过程。

在Visual Studio中启动Oracle调试侦听器时,工具->启动Oracle外部应用程序调试器,输出窗口中会出现以下消息:

PL/SQL调试器启动。PL/SQL调试器正在侦听主机:10.15.1.177和端口:4000。

在Oracle SQL Developer中,此消息显示为

调试侦听器(端口=4000超时=0本地地址=10.15.1.177)

使用Visual Studio,如果访问了网页并且没有断点,则输出窗口中将显示以下消息。

数据库已连接到主机10.15.1.177上的PL/SQL调试器端口:4000。线程0x1已退出,代码为0(0x0)。A.数据库已从主机10.15.1.177上的PL/SQL调试器断开连接端口:4000。

如果包中的任何地方,在DBMS_DEBUG_JDWP语句之前、之间或之后都有断点,则WEB浏览器和开发环境都将挂起。Visual Studio与";不响应";直到它被终止。

在Oracle SQL Developer中,WEB页面会挂起。如果侦听器已停止,则无法显示网页,因为没有可用的侦听器。

我无法控制Oracle服务器,但由于它建立了连接,我认为没有防火墙阻止端口。?

有人知道我错过了什么吗?

有人告诉我,你不能调试生成网页的PL/SQL包,但没有发现任何表明这是一个问题的文档。

我使用mod_plsql已经有很长一段时间了,根据我的个人经验,调试此类应用程序的最佳(如果不是唯一)方法是插入源代码。调试器适用于可以在浏览器外执行的pl/sql代码,但根据我的经验,对于与mod_plsql交互的代码,最好使用跟踪和日志消息来检测代码,并使用它们来遵循程序流。我们使用了一个非常复杂的日志框架,但这一切都归结为一个存储日志消息的简单表和一个在该表中插入日志消息的(自主)过程。

示例:

CREATE TABLE logtab (id NUMBER, when DATE, text VARCHAR2(2000));
CREATE SEQUENCE logseq;
CREATE OR REPLACE
PROCEDURE dolog(text IN VARCHAR2)
IS
    PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
    INSERT INTO logtab (id, when, text) VALUES (logseq.NEXTVAL, SYSDATE, SUBSTR(text, 1, 2000));
    COMMIT;
END dolog;
/
EXECUTE dolog('test');

最新更新