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

问题描述 投票:0回答:11

我有一个在 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
,它应该等到调试器连接为止,但相反,它启动时没有问题。

java debugging intellij-idea jar remote-debugging
11个回答
19
投票

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

15
投票

这个命令对我有用:

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。


4
投票

这个命令对我有用:

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

2
投票

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

我检查了多项内容,最后找到了原因:实际上就像一个宁静的服务一样,我们希望可以从运行它的服务器外部进行访问,我们应该将 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'

0
投票

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


0
投票

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

Copy and paste the arguments to the command line when JVM is started

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
投票

我重现了类似的问题:

Unable to open debugger port (localhost:5005): java.net.ConnectException "Connection refused (Connection refused)" 

我在使用

JVM
配置运行带有远程命令行参数的调试器时获得了它:
Run/Debug

通过 
附加 IDE

与公开的调试代理服务器。 自从我使用

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

集群以来,

原因
是:

一旦 Pod 创建并按预期运行

,我需要继续使用 Kubernetes 命令设置端口转发,并在运行调试器

之前在本地公开来自应用程序的流量
基于

kubectl 端口转发语法

kubectl port-forward

采用
格式

,例如: kubectl port-forward <resource-type/resource-name> [local_port]:<pod_port>

或更短的形式:

kubectl port-forward <pod-name> -n <namespace> 5005:5005

客户端本地监听5000端口,转发到内网的5000
吊舱。

因此,使用以下命令为
kubectl port-forward <pod-name> 5005:5005

集群配置服务的

entrypoint.sh
文件:
Kubernetes

结果,在调试器之前运行 
java -Djava.security.egd.=file:/dev/./urandom -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -Xmx400m -jar /service.jar

解决了问题。

    


0
投票

port-forward

端口启动后,重新启动 tomcat 并再次尝试连接。
希望有帮助。


0
投票


0
投票

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



0
投票

catalina.bat jpda start

IntelliJ IDEA - 地址 localhost:1099 已在使用中

© www.soinside.com 2019 - 2024. All rights reserved.