2

我对 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 和端口:4000 上的 PL/SQL 调试器。线程 0x1 已退出,代码为 0 (0x0)。数据库已与主机:10.15.1.177 和端口:4000 上的 PL/SQL 调试器断开连接。

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

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

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

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

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

谢谢你的帮助,

香农

4

1 回答 1

0

我使用 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');
于 2013-10-05T13:54:04.800 回答