如何对通过ngrok隧道暴露的远程JVM进行调试
问题原因&解决方案
- 1 修正IntelliJ远程调试配置
你当前配置的Host字段多了tcp://协议前缀,IDEA的远程调试功能只需要填写纯域名/IP,不需要带协议头,修改为:
这是导致握手失败的最常见原因。Debugger mode: Attach to remote JVM Host: 2.tcp.eu.ngrok.io Port: 10928 - 2 确认JDWP配置有效性
你当前使用的-agentlib:jdwp=transport=dt_socket,address=*:5005,server=y,suspend=n配置适用于Java 9及以上版本,如果你运行Java进程的设备使用的是Java 8及更低版本,将配置修改为-agentlib:jdwp=transport=dt_socket,address=0.0.0.0:5005,server=y,suspend=n,确保JDWP服务绑定到所有网络接口,而非仅本地回环接口。 - 3 验证隧道连通性
先在运行IntelliJ的设备上执行命令测试ngrok隧道是否能正常连通:telnet 2.tcp.eu.ngrok.io 10928
如果连接失败,按顺序排查:- 运行Java进程的设备上的ngrok tcp进程是否正常运行,没有被中断
- 运行Java进程的设备的防火墙是否放行5005端口的入站请求
- 远程设备上的Java进程是否正常启动,5005端口确实被JVM占用
- 4 版本兼容性校验
如果以上步骤都无误仍然握手失败,确认IntelliJ使用的JDK版本和远程设备上运行Java进程的JDK版本保持大版本一致,避免JDWP协议不兼容导致的握手中断。
补充说明:JDWP是原生TCP协议,不支持HTTP/HTTPS协议封装,你之前使用tcp类型的ngrok隧道是正确的,不需要尝试HTTP类型的隧道。
内容的提问来源于stack exchange,提问作者boris_strahilov
相关产品推荐
相关产品推荐

