从终端以调试模式运行jar

时间:2018-10-23 11:22:14

标签: java apache-commons-cli

我正在使用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和-Xrunjdwp参数未被识别为选项,并且得到:enter image description here 知道如何解决这个问题吗?

4 个答案:

答案 0 :(得分:4)

请假设问题的作者在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,因为localhost不再是默认值。

停止告诉人们使用-Xdebug-Xrunjdwp

Xdebug在Java 5及更低版本中使用。从Java 6开始,-agentlib可用。 Xdebug允许通过Xrunjdwp访问调试器。现在,如果您使用Xdebug,则JIT将以兼容模式启动,并使用传统调试器,这会极大降低调试速度。人们然后告诉使用-Djava.compiler=NONE禁用兼容性模式或添加-Xnoagent禁用旧式调试器。请勿使用-agentlib

答案 1 :(得分:2)

Java在指定要运行的类或jar后只希望程序参数。因此,只需尝试在此之前放置JVM选项:

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

答案 2 :(得分:1)

这对我有用

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

答案 3 :(得分:0)

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