我正在使用 JDI 调试另一个正在运行的 java 应用程序。
我所做的有效:
使用 Eclipse 运行两个应用程序。调试器使用以下 VM 选项启动:
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4000
另一个应用程序连接到端口 4000 处的套接字,并遵循正常过程(断点等)来获取局部变量的值。
工作正常并给我带来了值(value)。
我现在想做的事情:
我没有使用 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
在网上查了一下,关于异常是什么的信息很少。
如果您能帮助我找出问题所在,我将不胜感激!
最佳答案
当调试 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();
希望这有帮助,
关于java - JDI - IllegalConnectorArgumentsException : Argument invalid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24177068/