2

pl sql コードのデバッグで奇妙な状況があります。

デバッグ接続をリッスンするようにSQL開発者を設定しました。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);
                }

デバッガーは正常に接続します。つまり、SQL 開発者でRun Managerその接続が存在することを確認できます。

接続が作成されているにもかかわらず、デバッガーが機能しません。ブレークポイントに緑色のマークが付いていない場合もあれば、チェックされている場合もありますが、それでもブレークポイントは機能しません。いずれの場合も、デバッガーはブレークで停止せず、正常に呼び出されたプロシージャはブレークがないかのように実行されます。

ブレークを配置したパッケージは、デバッグ用にコンパイルされ、Start Debugger Optionに設定されていStep Overます。Sql Developer同じ動作で 3.2.2 と 3.0.6、3.0.4も試しました。「Sql Developer」とアプリケーションから使用するユーザーは同じで、このユーザーにはデバッグ権限があります ( DEBUG CONNECT SESSIONDEBUG ANY PROCEDURE)。それを機能させる方法のアイデアが不足しています。

次に何を試すべきか、この問題を診断する方法は?

4

1 に答える 1

1

根本的な問題が見つかりました。オラクルではなく、アプリケーションサーバーとデータベースへの接続に関するものです。1 つの Bean にデバッガーをアタッチし、別の Bean で plsql プロシージャを呼び出していました。それらは同じトランザクションにあったため、接続を共有する必要があると思いましたが、そうではありませんでした。そのため、プロシージャーが呼び出された Bean にデバッガーのアタッチメントを移動したところ、正常に動作するようになりました。

于 2013-05-14T13:46:54.040 に答える