我正在使用JDI来调试另一个正在运行的java应用程序。
我的工作是什么:
使用Eclipse运行两个应用程序。使用以下VM选项启动调试器:
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4000
另一个应用程序在端口4000连接到套接字,并按照正常程序(断点等)获取本地变量的值。
正常运作并给我这个价值。
我现在想做什么:
我没有使用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
在网上看了这个,并且几乎没有关于异常是什么的信息。
我很感激任何帮助,找出问题所在!
答案 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添加到类路径中,则可以解决问题。