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

Posted

技术标签:

【中文标题】调试 Oracle PL/SQL WEB 应用程序会挂起浏览器和开发工具【英文标题】:Debugging an Oracle PL/SQL WEB Application hangs browser and dev tool 【发布时间】:2012-09-04 16:56:27 【问题描述】:

我是 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,如果网页被访问并且没有断点,输出窗口会出现以下消息。

数据库已连接到主机上的 PL/SQL 调试器:10.15.1.177 和端口:4000。线程 0x1 以代码 0 (0x0) 退出。一种 数据库已与主机上的 PL/SQL 调试器断开连接:10.15.1.177 和端口:4000。

如果在包中的任何地方存在断点,在 DBMS_DEBUG_JDWP 语句之前、之间或之后,WEB 浏览器和开发环境都会挂起。 Visual Studio 一直处于“无响应”状态,直到它被终止。

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

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

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

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

感谢您的帮助,

香农

【问题讨论】:

在浏览网页时调试 PL/SQL 重要吗?如果没有,您可以使用 Oracle SQL Developper 调试器,假设所有需要的包都已编译进行调试。 【参考方案1】:

我使用 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');

【讨论】:

以上是关于调试 Oracle PL/SQL WEB 应用程序会挂起浏览器和开发工具的主要内容,如果未能解决你的问题,请参考以下文章

Toad Oracle Pl/sql 调试作为从断点跳转到断点

使用 PL\SQL Developer 7.0.2 调试 Oracle 触发器?

PL/SQL 中的问题 = 错误堆栈:ORA-01403:Oracle Application Express (APEX) 中没有数据

PL/SQL 里,在TEST窗口调试,想停止了时候,不能停止,怎么回事

Oracle 12 PL/SQL 在触发器中检索存储过程名称

选择将 Oracle PL/SQL 迁移到 Java 类/EJB [关闭]