我有一个在linux机器上运行的java应用程序。我使用以下代码运行java应用程序:
java myapp -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000, suspend=n
我已经在这台Linux机器上为TCP打开了端口4000。我从Windows XP机器上使用Eclipse并尝试连接到这个应用程序。我也在Windows中打开了端口。两台机器都在局域网上,但我似乎无法将调试器连接到Java应用程序。我做错了什么?
bq9c1y661#
**编辑:**我注意到有些人在这里剪切和粘贴调用。我最初给出的答案只与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
这里有两点:
runjdwp
ecfdbz9o2#
对于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技术说明从5.0开始,-agentlib:jdwp选项用于加载和指定JDWP代理的选项。对于5.0之前的发行版,使用-Xdebug和-Xrunjdwp选项(5.0实现也支持-Xdebug和-Xrunjdwp选项,但较新的-agentlib:jdwp选项更可取,因为5.0中的JDWP代理使用VM的TI JVM接口,而不是较旧的JVMDI接口)从JVM Tool interface documentation还需要注意一点:JVM TI是在JDK 5.0中引入的。JVM TI取代了Java虚拟机探查器接口(JVMPI)和Java虚拟机调试接口(JVMDI),从JDK 6开始,不再提供这两个接口。
g6ll5ycj3#
操作步骤:1.启动您的远程java应用程序与调试选项说,在上面的职位。1.通过指定主机和端口配置Eclipse以进行远程调试。1.在Eclipse中启动远程调试并等待连接成功。1.设置断点并调试。1.如果您想从应用程序的开始调试,使用suspend=y,这将使远程应用程序保持挂起状态,直到您从eclipse连接。有关完整详细信息,请参阅Step by Step guide on Java remote debugging。
bweufnob4#
回答Java〉= 9:
对于Java 9+,JVM选项需要做一点改动,即在地址前面加上承载JVM的计算机的IP地址,或者只加上*:
*
-agentlib:jdwp=transport=dt_socket,server=y,address=*:8000,suspend=n
这是由于www.example.com中的一项更改https://www.oracle.com/java/technologies/javase/9-all-relnotes.html#JDK-8041435。对于Java〈9,端口号足以连接。
sycxhyv75#
我想强调的是,参数的顺序很重要。java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 -jar app.jar命令打开调试器端口,但java -jar app.jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000命令不会。它会将app.jar后面的所有内容作为命令行参数传递。
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 -jar app.jar
java -jar app.jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000
zi8p0yeb6#
以下是为远程调试设置Eclipse调试器的方法:
日 eclipse 设置:
1.单击“运行”按钮2.选择调试配置3.选择“远程Java应用程序”4.新建配置
1.按如下所示更改vm中的/path/toJboss/jboss-eap-6.1/bin/standalone.conf:通过删除#取消注解以下行:
/path/toJboss/jboss-eap-6.1/bin/standalone.conf
JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n"
对于Tomcat:
在** Catalina **文件中:第一步:
CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"
第二步:
JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"
步骤3:从命令提示符运行Tomcat,如下所示:
catalina.sh jpda start
然后,您需要在希望调试的Java类中设置断点。
vi4fp9gy7#
对于每个人来说,如果你真的从一台机器到另一台机器进行远程调试,那么使用:-agentlib:jdwp=传输=dt_套接字,服务器=y,地址=8000,挂起=n这是不够的,因为它现在绑定到localhost(至少在unix/osx机器上),所以您只能从localhost连接到它。如果你试图远程调试这个,那么你会得到连接拒绝。从我认为Java 9上,你需要做:-agentlib:jdwp=传输=dt_套接字,服务器=y,地址=*:8000,挂起=n或者给予它需要为HAT绑定的IP *
7条答案
按热度按时间bq9c1y661#
**编辑:**我注意到有些人在这里剪切和粘贴调用。我最初给出的答案只与OP相关。下面是一个更现代的调用风格(包括使用更传统的8000端口):
原来的答案如下。
试试看:
这里有两点:
runjdwp
选项中没有空格。1.选项在类名之前。类名之后的任何参数都是程序的参数!
ecfdbz9o2#
对于JDK 1.3或更早版本:
对于JDK 1.4
对于较新的JDK:
请根据需要更改端口号。
来自java技术说明
从5.0开始,-agentlib:jdwp选项用于加载和指定JDWP代理的选项。对于5.0之前的发行版,使用-Xdebug和-Xrunjdwp选项(5.0实现也支持-Xdebug和-Xrunjdwp选项,但较新的-agentlib:jdwp选项更可取,因为5.0中的JDWP代理使用VM的TI JVM接口,而不是较旧的JVMDI接口)
从JVM Tool interface documentation还需要注意一点:
JVM TI是在JDK 5.0中引入的。JVM TI取代了Java虚拟机探查器接口(JVMPI)和Java虚拟机调试接口(JVMDI),从JDK 6开始,不再提供这两个接口。
g6ll5ycj3#
操作步骤:
1.启动您的远程java应用程序与调试选项说,在上面的职位。
1.通过指定主机和端口配置Eclipse以进行远程调试。
1.在Eclipse中启动远程调试并等待连接成功。
1.设置断点并调试。
1.如果您想从应用程序的开始调试,使用suspend=y,这将使远程应用程序保持挂起状态,直到您从eclipse连接。
有关完整详细信息,请参阅Step by Step guide on Java remote debugging。
bweufnob4#
回答Java〉= 9:
对于Java 9+,JVM选项需要做一点改动,即在地址前面加上承载JVM的计算机的IP地址,或者只加上
*
:这是由于www.example.com中的一项更改https://www.oracle.com/java/technologies/javase/9-all-relnotes.html#JDK-8041435。
对于Java〈9,端口号足以连接。
sycxhyv75#
我想强调的是,参数的顺序很重要。
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 -jar app.jar
命令打开调试器端口,但
java -jar app.jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000
命令不会。它会将app.jar后面的所有内容作为命令行参数传递。zi8p0yeb6#
以下是为远程调试设置Eclipse调试器的方法:
日 eclipse 设置:
1.单击“运行”按钮
2.选择调试配置
3.选择“远程Java应用程序”
4.新建配置
对于JBoss:
1.按如下所示更改vm中的
/path/toJboss/jboss-eap-6.1/bin/standalone.conf
:通过删除#取消注解以下行:对于Tomcat:
在** Catalina **文件中:
第一步:
第二步:
步骤3:从命令提示符运行Tomcat,如下所示:
然后,您需要在希望调试的Java类中设置断点。
vi4fp9gy7#
对于每个人来说,如果你真的从一台机器到另一台机器进行远程调试,那么使用:
-agentlib:jdwp=传输=dt_套接字,服务器=y,地址=8000,挂起=n
这是不够的,因为它现在绑定到localhost(至少在unix/osx机器上),所以您只能从localhost连接到它。
如果你试图远程调试这个,那么你会得到连接拒绝。从我认为Java 9上,你需要做:
-agentlib:jdwp=传输=dt_套接字,服务器=y,地址=*:8000,挂起=n
或者给予它需要为HAT绑定的IP *