JDI - IllegalConnectorArgumentsException:参数无效

时间:2014-06-12 05:31:39

标签: java eclipse jdi

我正在使用JDI来调试另一个正在运行的java应用程序。

我的工作是什么:

  1. 使用Eclipse运行两个应用程序。使用以下VM选项启动调试器:

    -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4000
    
  2. 另一个应用程序在端口4000连接到套接字,并按照正常程序(断点等)获取本地变量的值。

  3. 正常运作并给我这个价值。

  4. 我现在想做什么:

    我没有使用Eclipse来启动两个进程,而是在Eclipse中启动一个进程,而Process使用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
    

    在网上看了这个,并且几乎没有关于异常是什么的信息。

    我很感激任何帮助,找出问题所在!

2 个答案:

答案 0 :(得分:1)

当调试JVM的连接器参数出错时抛出此异常。我认为你的调试参数必须放在同一个参数中而不是两个单独的参数(在同一个参数上放-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();

希望这有帮助,

答案 1 :(得分:0)

您错过了这段代码:import com.sun.jdi.connect.IllegalConnectorArgumentsException;

这取决于jdk / lib / tool.jar。如果将此jar添加到类路径中,则可以解决问题。