如何调试 ngrok 隧道暴露的远程 JVM

How to debug remote JVM exposed by ngrok tunnel

我的一台机器上有一个 java 进程侦听端口 4502。我使用 ngrok 创建了一个隧道,以便我可以访问我的开发机器上的应用程序。我面临的问题是将调试器附加到远程 JVM。

这是我正在使用的调试 java 配置:

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

这是应用程序隧道的 ngrok 配置:

ngrok http 4502

这是 JVM 隧道的 ngrok 配置(我也试过 http 协议,但没有成功):

ngrok tcp 5005

ngrok 为 tcp 隧道输出以下内容:

Forwarding tcp://2.tcp.eu.ngrok.io:10928 -> 127.0.0.1:5005

使用 IntelliJ,我这样配置远程调试:

Debugger mode: Attach to remote JVM
Host: tcp://2.tcp.eu.ngrok.io
Port: 10928

启动调试器时出现以下错误:

错误运行'Debug Author Desktop':无法打开调试器端口(tcp://2.tcp.eu.ngrok.io:10928):java.io.IOException“握手失败-连接过早关闭

机器运行上的java进程,在启动进程之前,我已经确保5005端口是打开的。在使用 IntelliJ 的机器上,我确保 10928 端口是打开的。我必须做什么才能将调试器附加到我第二台机器上的进程 运行?任何帮助将不胜感激。

我找到了解决办法。问题出在远程调试器配置中。指定主机时,不得包含协议。一旦我将 tcp://2.tcp.eu.ngrok.io 更改为 2.tcp.eu.ngrok.io,它就起作用了!