通过IntelliJ无法打开调试端口

28

我在DigitalOcean上运行了一个服务器,并且有一个我想要调试的JAR文件。我首先使用以下方法在远程服务器上启动JAR:

java -jar Server.jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

但是在控制台上我看不到像“listening on port 5005…”的输出。

当我在IntelliJ中按下调试时,它会显示:

无法打开调试器端口(198.xxx.xxx.xx:5005): java.net.ConnectException“连接被拒绝”

这是我的IntelliJ配置:
enter image description here

我还尝试使用-Xdebug,但仍然没有起作用。

如果我设置suspend=y,它应该等待直到调试器连接,但实际上它启动时没有出现任何问题。

11个回答

20

远程调试Java进程的命令看起来正确。如果在启动服务器JAR文件时没有看到“Listening to Port blah”,那么可能意味着调试参数没有被识别。另一种快速检查的方法是在执行服务器JAR文件的计算机上使用telnet localhost 5005进行测试。如果该端口未被使用,则telnet会失败。

我建议您尝试以下操作,因为参数的顺序可能很重要(稍后我会添加一些官方证据):

java "agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005" -jar Server.jar

4
强调一下,参数的顺序确实很重要。 - Renato Back
6
官方证据在哪里?啊?啊?开玩笑的。 - Kajzer

16

这个命令对我很有效:

export JAVA_OPTS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5005'

Idea默认的远程对话框建议:

'agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005'

将其更改为:

'agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5005'

并且问题出现在端口5005。


1
它对我起作用了,但我不知道为什么...问题出在Intellij连接到Docker容器内的Tomcat上。 - mbartn
在使用Intellij IDEA连接远程服务器时,当我使用export JAVA_OPTS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5505'时,它没有起作用。但是当我使用address=0.0.0.0:5505时,它就可以工作了。 - K. Siva Prasad Reddy
2
救命稻草!谢谢。我花了最后一个小时尝试不同的配置,而我所缺少的只是端口前面的“0.0.0.0”部分。 - Lukenzo
这个在 setenv 中的 '-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5505' 对我有效。 - abinthomas12914
添加“0.0.0.0:”就可以了!谢谢!但是,“0.0.0.0:”有什么区别呢? - Instein
另外,使用的JDK版本确实很重要。注意一下远程JVM调试运行配置对话框窗口中的“远程JVM命令行参数”部分。在右侧,有一个下拉菜单可以选择不同版本的JDK。不同版本的JDK在服务器端需要不同的JVM参数。 - undefined

5
这个命令对我有效:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar Server.jar 

这是一个相当老的帖子,但我想强调一件事情——我之前也使用了同样的命令,但是将address=*:5005改为address=5005后,它就完美地运行了。 - undefined

2
感谢suifengpiao14的帮助,但我想更详细地描述一下问题。
我检查了多个方面,并最终找到了原因:实际上,就像我们希望从运行服务器之外访问它的restful服务一样,我们应该将0.0.0.0设置为nameserver,这里我们应该做类似的事情。 我使用netstat命令检查了可以远程调试的服务器和无法远程调试的服务器之间的区别:
对于我可以正常工作的服务器:
tcp        0      0 0.0.0.0:5005            0.0.0.0:*               LISTEN      8323/java

针对我遇到问题的服务器:

tcp        0      0 127.0.0.1:5005            0.0.0.0:*               LISTEN      8323/java

所以,使用以下JVM选项应该有帮助:
'agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005'
'agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5005'

0

其中一个原因是端口未启用。您可以尝试使用以下命令启用端口

firewall-cmd --zone=public --permanent --add-port=8001/tcp

端口启动后,请重启Tomcat并尝试重新连接。 希望这能有所帮助。


0

对于像我这样有时会忘记阅读的人...

在JVM启动时将参数复制并粘贴到命令行中
IntelliJ中的运行/调试配置说道,直接位于以下位置:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005

意思是: 复制此行并转到您的docker配置。添加一个环境变量(修改选项下拉菜单)。在前面加上JAVA_OPTS=,然后将其粘贴到那里。

现在当您正确完成每个步骤时,您将拥有
Listening for transport dt_socket at address: 5005

Command line argument: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005

这就是我解决它的方法...


0
在使用Tomcat调试器端口时,您应该使用以下命令启动Tomcat服务器:

catalina.bat jpda start

0
在我的情况下,是因为在设置 -> 构建、执行、部署 -> 调试器下,我有一个内置服务器正在使用与我尝试连接调试器的端口相同的端口。

0

这可能会帮助某些人,JVM调试端口不是您的Web应用程序端口


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接