无法通过 IntelliJ 打开调试器端口

Posted

技术标签:

【中文标题】无法通过 IntelliJ 打开调试器端口【英文标题】:Unable to open debugger port through IntelliJ 【发布时间】:2017-03-27 08:16:34 【问题描述】:

我有一个在 DigitalOcean 上运行的服务器和一个我想要调试的 JAR 文件。我首先使用

在远程服务器上启动 JAR
java -jar Server.jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

但在控制台上我看不到“正在侦听端口 5005...”之类的输出。

当我在 IntelliJ 中按下调试时,它会说

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

这是我的 IntelliJ 配置:

我也尝试过使用-Xdebug,但还是不行。

如果我设置了suspend=y,它应该等到连接调试器,但它会毫无问题地启动。

【问题讨论】:

【参考方案1】:

在调试模式下启动远程 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

【讨论】:

我想强调一个事实,即参数的顺序确实很重要。 官方证据在哪里?嗯?嗯?笑话。【参考方案2】:

这个命令对我有用:

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

默认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。

【讨论】:

它对我有用,但我不知道为什么...问题是 intellij 连接到 docker 容器内的 tomcat。 从 Intellij IDEA 连接到远程服务器时,当我使用 export JAVA_OPTS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5505' 时它不起作用.但是当我使用 address=0.0.0.0:5505 时,它就起作用了。 救命稻草!谢谢你。我花了最后一个小时尝试不同的配置,我所缺少的只是端口之前的“0.0.0.0”部分 这在 setenv '-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5505' 为我工作【参考方案3】:

这个命令对我有用:

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

【讨论】:

【参考方案4】:

感谢 suifengpiao14 但我将更详细地描述这个问题。

我检查了很多东西,最后找到了原因:实际上,就像一个 restful 服务一样,我们希望从运行它的服务器外部访问它,我们应该将 0.0.0.0 设置为名称服务器,这里我们应该做一个类似的。 我检查了我可以远程调试的服务器和我不能远程调试的服务器之间的区别。使用 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'

【讨论】:

【参考方案5】:

在我的情况下,这是因为在设置 -> 构建、执行、部署 -> 调试器下,我有一个内置服务器运行在与我出于某种原因尝试将调试器附加到的端口相同的端口上。

【讨论】:

以上是关于无法通过 IntelliJ 打开调试器端口的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 intelliJ Idea 打开 Spring Boot 调试的调试器端口

使用intellij远程调试nodejs

GAE项目Intellij远程调试在关闭时不释放端口

IntelliJ IDEA + tomcat 远程调试

Android Studio 调试器无法打开选定的 VM 调试端口 (8700)

IntelliJ IDEA服务器远程调试报Connection refused