运行 终端调试模式下的 jar

run jar in debug mode from terminal

我正在使用 intellij idea IDE 并且我正在尝试 运行 我的 jar 文件从终端处于调试模式并在代码的几个地方设置断点。

我使用的命令是:java -jar myTestApp.jar -file "myfile.txt" -users myUser -Xdebug -Xrunjdwp:transport=dt_socket,server=127.0.0.1,suspend=n,address=8080

问题是我也在使用 commons-cli 库,所以 -Xdebug 和 -X运行jdwp 参数不被识别为选项,我得到: 知道如何解决这个问题吗?

-Xdebug 应该移到-jar 参数前面。现在 Java 认为它是程序参数的一部分。

在将 class 或 jar 指定为 运行 之后,

Java 只需要程序参数。因此,只需尝试将您的 JVM 选项放在这之前:

java -Xdebug -Xrunjdwp:transport=dt_socket,server=127.0.0.1,suspend=n,address=8080 -jar myTestApp.jar -file "myfile.txt" -users myUser 

请假设问题的作者在 2018 年没有使用 Java 5:

java -agentlib:jdwp=transport=dt_socket,address=8080,server=y,suspend=n -jar myTestApp.jar -file "myfile.txt -users myUser

顺便说一句:如果您使用 Java 9 and later:将 address=8080 更改为 address=*:8080,因为本地主机不再是默认设置。

不要告诉人们使用 -Xdebug-Xrunjdwp

Xdebug 用于 Java 5 及以下版本。由于 Java 6 有 -agentlib 可用。 Xdebug 允许通过 Xrunjdwp 访问调试器。如果您使用 Xdebug 并使用遗留调试器,JIT 现在以兼容模式启动,这会极大地减慢您的调试速度。人们告诉然后使用 -Djava.compiler=NONE 禁用兼容模式或添加 -Xnoagent 禁用旧版调试器。不要这样做使用 -agentlib!

这对我有用

java -jar -Xdebug  -agentlib:jdwp="transport=dt_socket,server=y,suspend=n,address=5000" core-service-1.0-SNAPSHOT.jar