1

JDI を使用して、実行中の別の Java アプリケーションをデバッグしています。

私がすることはうまくいきます:

  1. Eclipse を使用して 2 つのアプリケーションを実行します。デバッガーは、次の VM オプションで起動されます。

    -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4000
    
  2. もう一方のアプリケーションはポート 4000 のソケットに接続し、通常の手順 (ブレーク ポイントなど) に従ってローカル変数の値を取得します。

  3. 適切に機能し、その価値を私に与えてくれます。

今やりたいこと:

Eclipse を使用して 2 つのプロセスを起動する代わりに、Eclipse で 1 つを起動し、次の引数でProcessa を使用して別のプロセスを起動します。ProcessBuilder

String[] args1 = {getJavaDir(),"-cp",classpath,"-Xdebug", "-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4000", "processII.Main2"};
ProcessBuilder builder = new ProcessBuilder(args1);
builder.directory(directory);
Process process = builder.start();

プロセスが正常に開始されます。ただし、最初のプロセスでアクセスしようとすると、次のエラーが発生します。

com.sun.jdi.connect.IllegalConnectorArgumentsException: Argument invalid

これをオンラインで調べましたが、例外とは何かについての情報はほとんどありません。

問題が何であるかを理解する助けをいただければ幸いです!

4

2 に答える 2

1

この例外は、JVM をデバッグするためのコネクタ パラメータにエラーがある場合にスローされます。デバッグ パラメーターは、2 つの別々の引数 (同じ引数に入れる)-Xdebugではなく、同じ引数にまとめて入れる必要があると思います。-Xrunjdwp...

String[] args1 = {getJavaDir(),"-cp",classpath,"-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4000", "processII.Main2"};
ProcessBuilder builder = new ProcessBuilder(args1);
builder.directory(directory);
Process process = builder.start();

お役に立てれば、

于 2014-06-12T06:18:07.517 に答える