我知道有一些JAVA_OPTS设置远程调试Java程序。它们是什么,它们意味着什么?
JAVA_OPTS
esyap4oy1#
在Java 5.0之前,使用-Xdebug和-Xrunjdwp参数。这些选项在以后的版本中仍然有效,但它将以解释模式而不是JIT运行,这将更慢。从Java 5.0开始,最好使用-agentlib:jdwp单个选项:
-Xdebug
-Xrunjdwp
-agentlib:jdwp
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1044
字符串-Xrunjdwp或agentlib:jdwp参数的选项为:
agentlib:jdwp
transport=dt_socket
address=8000
suspend=y
xqkwcwgp2#
我有this article书签设置为Java 5及以下。run it with:
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044
字符串对于Java 5 and above,运行它:
型如果您希望Java在执行应用程序之前等待您连接,请将suspend=n替换为suspend=y。
suspend=n
bq8i3lrv3#
由于Java 9.0 JDWP默认只支持本地连接。http://www.oracle.com/technetwork/java/javase/9-notes-3745703.html#JDK-8041435对于远程调试,应该运行地址为*:的程序:
*:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000
字符串
umuewwlo4#
对于Java 1.5或更高版本:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 <YourAppName>
字符串对于java 1.4:
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 <YourAppName>
型对于java 1.3:
java -Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 <YourAppName>
型下面是一个简单程序的输出:
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044 HelloWhirled Listening for transport dt_socket at address: 1044 Hello whirled
型
siotufzp5#
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8001,suspend=y -jar target/cxf-boot-simple-0.0.1-SNAPSHOT.jar
字符串address指定允许调试的端口
address
**使用Maven安装Sping Boot 应用程序:
mvn spring-boot:run -Drun.jvmArguments=**"-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8001"
olhwl3o26#
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=PORT_NUMBER
gradle bootrun --debug-jvm
mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=PORT_NUMBER
7uzetpgm7#
这里是 maven 构建的最简单的解决方案。如果您使用Maven,则需要很多环境特殊配置。因此,如果您从Maven启动程序,只需运行mvnDebug命令而不是mvn,它将负责启动配置了远程调试的应用程序。现在您可以在端口8000上附加调试器。它会为你解决所有的环境问题。
mvnDebug
mvn
kxkpmulp8#
-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=PORT_NUMBER
字符串这里我们只使用了一个Socket Attaching Connector,当配置了dt_socket传输并且VM在服务器调试模式下运行时,默认情况下会启用该Connector。更多详情请参考:https://stackify.com/java-remote-debugging/
mm5n2pyu9#
如果你使用的是java 9或更高版本,要远程调试(当你在本地使用docker时也是如此),你必须提供--debug *:($port)。因为从java 9 --debug ($port)只允许在本地调试 *,而不是远程调试 *。因此,您可以在docker-compose中提供命令,如command: -- /opt/jboss/wildfly/bin/standalone.sh --debug *:8787
--debug *:($port)
--debug ($port)
command: -- /opt/jboss/wildfly/bin/standalone.sh --debug *:8787
9条答案
按热度按时间esyap4oy1#
在Java 5.0之前,使用
-Xdebug
和-Xrunjdwp
参数。这些选项在以后的版本中仍然有效,但它将以解释模式而不是JIT运行,这将更慢。从Java 5.0开始,最好使用
-agentlib:jdwp
单个选项:字符串
-Xrunjdwp
或agentlib:jdwp
参数的选项为:transport=dt_socket
:表示用于连接JVM的方式(socket是一个不错的选择,它可以用于调试远程计算机)address=8000
:TCP/IP端口暴露,从调试器连接(将只允许本地连接,请参阅安东尼Shumskikh的远程调试答案)suspend=y
:如果是,告诉JVM等待调试器连接到开始执行,否则(如果是“n”),立即开始执行。xqkwcwgp2#
我有this article书签设置为Java 5及以下。
run it with:
字符串
对于Java 5 and above,运行它:
型
如果您希望Java在执行应用程序之前等待您连接,请将
suspend=n
替换为suspend=y
。bq8i3lrv3#
由于Java 9.0 JDWP默认只支持本地连接。http://www.oracle.com/technetwork/java/javase/9-notes-3745703.html#JDK-8041435
对于远程调试,应该运行地址为
*:
的程序:字符串
umuewwlo4#
对于Java 1.5或更高版本:
字符串
对于java 1.4:
型
对于java 1.3:
型
下面是一个简单程序的输出:
型
siotufzp5#
java
字符串
address
指定允许调试的端口Maven
**使用Maven安装Sping Boot 应用程序:
型
olhwl3o26#
命令行
字符串
Gradle
型
Maven
型
7uzetpgm7#
这里是 maven 构建的最简单的解决方案。
如果您使用Maven,则需要很多环境特殊配置。因此,如果您从Maven启动程序,只需运行
mvnDebug
命令而不是mvn
,它将负责启动配置了远程调试的应用程序。现在您可以在端口8000上附加调试器。它会为你解决所有的环境问题。
kxkpmulp8#
字符串
这里我们只使用了一个Socket Attaching Connector,当配置了dt_socket传输并且VM在服务器调试模式下运行时,默认情况下会启用该Connector。
更多详情请参考:https://stackify.com/java-remote-debugging/
mm5n2pyu9#
如果你使用的是java 9或更高版本,要远程调试(当你在本地使用docker时也是如此),你必须提供
--debug *:($port)
。因为从java 9--debug ($port)
只允许在本地调试 *,而不是远程调试 *。因此,您可以在docker-compose中提供命令,如
command: -- /opt/jboss/wildfly/bin/standalone.sh --debug *:8787