我正在使用带有 Maven 的 Eclipse Juno 并且有一个 JUnit 测试,它使用 Jemmy 启动另一个 Java 应用程序并通过事件队列对其运行自动化测试。由于被测试应用程序的限制,并且我们想要运行应用程序的多个实例,它必须在自己的进程中运行。
因此,我运行 JUnit 测试的主类设置环境,然后通过 ProcessBuilder 创建一个进程,并执行该进程以在同一个进程/jvm 中生成一个 Jemmy 工作者和目标应用程序。
我的问题是我想调试生成的进程,但我似乎无法按照所有其他 Eclipse 远程调试指南这样做。我的流程构建器看起来像这样
ProcessBuilder builder = new ProcessBuilder(
javaBin,
"-Xmx512M",
"-Xdebug",
"-Xrunjdwp:transport=dt_socket,address=8002,server=y,suspend=y",
"-cp", classpath, "-Djava.library.path=./native", "-D"
+ PID_PROP + "=" + newPid, MyJemmyTestHarness.class
.getCanonicalName());
无论我指定哪个端口,我都会收到相同的错误
ERROR: transport error 202: bind failed: Address already in use
我已经尝试了几十个端口,我知道这些端口没有被使用,并且 processbuilder 只是拒绝从打开的 JDWP 端口开始。所以我认为我在尝试如何做到这一点上有一个系统性的问题,但我在这方面的经验不是很丰富。我几乎完全按照远程调试指南进行操作,例如:
远程调试 Java 应用程序 http://javarevisited.blogspot.nl/2011/02/how-to-setup-remote-debugging-in.html
然而,地址已在使用中的错误仍然存在。有任何想法吗?