Java JDB: 错误: 传输错误 202: 获取主机名称: 未知主机

2022-09-01 10:16:29

我有一个与这篇文章非常相似的错误消息;但是,同一帖子上的解决方案对我不起作用。不幸的是,编辑我添加到主机文件的主机文件(链接线程中的每个解决方案)对我没有任何帮助。127.0.0.1 my-host-name

在JDB中“运行”后,我收到以下错误消息:

正在初始化 jdb ...

run run QuadtreeBitmap VM start exception: VM 初始化失败: /Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home/bin/java -Xdebug -Xrunjdwp:transport=dt_socket,address=Patricks-iMac.local:50547,suspend=y QuadtreeBitmap

错误:传输错误 202:获取主机名:未知主机错误:JDWP 传输dt_socket无法初始化,TRANSPORT_INIT(510) JDWP 退出错误AGENT_ERROR_TRANSPORT_INIT(197):未初始化传输 [debugInit.c:730]

致命错误:目标 VM 初始化失败。

我正在使用MacOS并尝试直接通过终端启动JDB(而不是通过Eclipse或任何其他IDE)。


答案 1

在我的情况下,问题与Java 8有关。我使用Java 9 +语法进行远程调试器:

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

虽然对于Java 8,你不能使用格式的地址*:p排序,它应该是:

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

答案 2

jvm 正在尝试打开 at 主机 ,但首先需要将该主机名解析为 IP 地址。DNS查找将失败,因为它是分配给专用地址的虚拟主机名,DNS服务器通常不知道它们,除非系统管理员配置了它们(公司习惯这样做)。有两种解决方案:dt_socketPatricks-iMac.local50547

  1. 在主机文件上添加主机名映射,同时保留为该 IP 配置的其他名称
    127.0.0.1 localhost Patricks-iMac.local

  2. 按 IP 地址配置dt_socket,无需接触主机文件(推荐)

-Xrunjdwp:transport=dt_socket,address=127.0.0.1:50547

关于网络故障排除的一句话

  • unknown host表示 DNS 问题,TCP 连接根本没有启动,因为 IP 地址不可用。
  • host unreachable表示 TCP 连接问题,IP 已知但由于防火墙、路由或其他问题而无法访问。 到该 IP 将失败。ping
  • port unreachable意味着TCP连接问题,IP是可访问的,但端口不是因为防火墙,服务关闭等。 到 IP 将正常工作,但与该端口的连接仍将失败。ping

关于安全性
的一句话 以下语法意味着存在安全风险,因为调试端口将在所有接口上公开。缓解措施可能很好。

address=*:5005
address=0.0.0.0:5005
address=5005 (java 8, binds to loopback interface on java 9+)