Java 远程调试 (JPDA) 在 Tomcat 9 中对我不起作用

Java remote debugging (JPDA) not working for me in Tomcat 9

我正在尝试在最近升级的 Tomcat 9.0.13 上远程调试 Tomcat webapp 并打开 JDK 11.0.1。服务器是 Redhat Enterprise Linux 7.6,我在 Windows 7 开发者盒子上使用 Eclipse 进行连接。

Tomcat 启动,应用程序可在端口 8080 上访问,但在某些请求上失败。因此,在我的 Eclipse 上,我已经使用我的配置详细信息配置了一个 Remote Java 应用程序。当我尝试连接到它时,连接失败

Failed to connect to remote VM. Connection refused.

我使用的是默认端口 8000,在 Linux 服务器上,netstat -an 显示有一个进程在 Tomcat 启动时而非 [=35] 时侦听该端口=]停止。

我尝试从 Windows 框远程登录到端口 8000 并获得

$ telnet c516vefpubrec 8000
Trying XX.XXX.XX.XX...
telnet: Unable to connect to remote host: Connection refused

当我做同样的事情时运行 我们的旧Tomcat 7 + Java 1.8 一切都成功了。我试过其他端口也有同样的结果。

这可能是一个错误吗? Tomcat9上是否有启用JPDA的配置项?

我遇到了完全相同的问题。我是 运行 来自 centos 虚拟机的应用程序并试图从我的 windows 机器调试。

我不得不进入 vm 上的 catalina.sh 文件并进行编辑。 在处理 jpda 标志的部分中,需要将 JPA_OPTS 变量更改为 JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=*:$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"

注意 JPDA 变量前的 *:。这允许任何 ip 地址都可以访问远程调试。我相信默认情况下它只允许本地主机。

希望对您有所帮助。

我在 docker 中遇到了类似的问题 运行 Tomcat 9。 我在 docker 构建中指定了 JPDA_ADDRESS 以允许从任何主机访问:

环境 JPDA_ADDRESS=8000 命令 ["catalina.sh", "jpda", "run"]

如果您使用 Windows 并使用 Tomcat 作为 64 位服务。然后需要在 Windows 注册表中进行更改。 此注册表路径:

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Apache Software Foundation\Procrun 2.0\<Tomcat9ServiceName>\Parameters\Java

对于 32 位 Windows 此路径将没有 WOW6432Node。 有一个字符串值选项,可以通过在其中添加这两行来启用远程调试

-Xdebug
-Xrunjdwp:transport=dt_socket,address=*:4446,server=y,suspend=n

如果您不将 *: 添加到地址参数,则只能从本地主机进行远程调试。 *: 表示您可以从 anywhere/any 主机连接到 tomcat 进行调试。

Tomcat9ServiceName - 是下面屏幕截图中显示的 Tomcat 服务的名称,通常您在安装过程中键入它