【发布时间】:2013-05-06 00:27:47
【问题描述】:
我在调试 pl sql 代码时遇到了一个奇怪的情况。
我将 sql developer 设置为侦听调试连接。在 java 代码中,我使用以下代码附加调试器:
CallableStatement cstmt = null;
try {
cstmt = getConnection().prepareCall("begin DBMS_DEBUG_JDWP.CONNECT_TCP( '10.1.1.17', 4000); end;");
cstmt.execute();
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeStatement(cstmt);
}
调试器连接成功,即我可以在Run Manager的sql developer中看到该连接存在。
尽管创建了连接,但调试器不起作用。有时断点没有打上绿色标记,有时是,但断点仍然不起作用。在任何情况下,调试器都不会在中断时停止,调用的过程会成功执行,就像没有中断一样。
我放置中断的包被编译用于调试,Start Debugger Option 设置为Step Over。我还尝试Sql Developer 3.2.2 和 3.0.6, 3.0.4 具有相同的行为。我在“Sql Developer”和应用程序中使用的用户是相同的,并且该用户具有调试权限(DEBUG CONNECT SESSION、DEBUG ANY PROCEDURE)。我已经没有如何让它发挥作用的想法了。
接下来要尝试什么,如何诊断这个问题?
【问题讨论】:
-
会话是否开启了 PL/SQL 调试? ALTER SESSION SET PLSQL_DEBUG=TRUE
-
您在使用 RAC 吗?如果是这样,您需要连接到特定节点。
-
@Brian,这没有任何效果。我找到了根本问题并将添加评论。
-
@jonearles,好点,但我使用相同的节点。我发现了根本问题。它与 oracle 无关,它与应用程序服务器和与数据库的连接有关。我在一个 bean 中附加调试器并在另一个 bean 中调用 plsql 过程。由于他们在同一个事务中,我认为应该共享连接,但事实并非如此。所以我只是将调试器附件移到调用程序的 bean 上,现在它可以正常工作了。
-
@michaelnesterenko 请将评论移至答案:)
标签: java oracle plsql remote-debugging oracle-sqldeveloper