我有一个运行在linux机器上的java应用程序。 我使用以下方法来运行这个java应用程序。
java myapp -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000, suspend=n
我在这台Linux机器上为TCP打开了4000端口。 我在Windows XP机器上使用eclipse,并尝试连接到这个应用程序。 我在windows中也打开了这个端口。
两台机器都在局域网上,但我似乎无法将调试器连接到Java应用程序上。 我做错了什么?
编辑:我注意到有些人在这里剪切和粘贴调用的内容。我最初给出的答案只与OP有关。这里有一个更现代的调用方式(包括使用更传统的8000端口)。
java -agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=n <other arguments>
原答案如下。
试试这个。
java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=n myapp
这里有两点。
1.runjdwp
选项中没有空格。
2.2. 选项在类名之前。在类名之后的任何参数都是你的程序的参数
对于JDK 1.3或更早的版本。
-Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6006
对于JDK 1.4
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6006
对于较新的JDK:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=6006
请根据您的需要更改端口号。
来自java technotes 的内容
从5.0开始,-agentlib:jdwp选项被用来加载和指定 JDWP代理的选项。对于5.0之前的版本,-Xdebug和 -Xrunjdwp选项(5.0的实现也支持-Xdebug和-Xrunjdwp选项,但较新的-agentlib:jdwp选项更可取,因为5.0的JDWP代理使用JVM TI接口到 VM的接口,而不是旧的JVMDI接口)
还有一件事要注意,来自JVM工具接口文档。
JVM TI是在JDK 5.0时引入的。JVM TI取代了Java虚拟机分析器接口(JVMPI)和Java虚拟机调试接口(JVMDI),从JDK 6开始,这两个接口不再提供。
步骤。
1.如上文所述,用调试选项启动你的远程java应用程序。
2.通过指定主机和端口来配置Eclipse进行远程调试。
3.在Eclipse中启动远程调试,并等待连接成功。
4.设置断点并进行调试。
5.如果你想从应用程序开始调试,使用 suspend=y ,这将保持远程应用程序暂停,直到你从eclipse连接。
详细情况请参见Java远程调试步骤指南。