Java JDB:错误:传输错误202:gethostbyname:未知主机

use*_*888 8 java debugging

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

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

初始化jdb ...

运行运行QuadtreeBitmap VM启动异常: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:gethostbyname:未知主机错误:JDWP传输dt_socket无法初始化,TRANSPORT_INIT(510)JDWP退出错误AGENT_ERROR_TRANSPORT_INIT(197):没有传输初始化[debugInit.c:730]

致命错误:目标VM无法初始化.

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

JJ *_*man 26

就我而言,问题与 Java 8 相关。我使用 Java 9+ 语法进行远程调试:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
Run Code Online (Sandbox Code Playgroud)

而对于 Java 8,您不能使用格式 * :port 的地址,它假设为:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
Run Code Online (Sandbox Code Playgroud)

  • 哇哦,伙计,你可能节省了我几个小时的时间。我也曾经使用 `address=*:5005` 语法,但没有意识到 java 8 的这种差异。你太棒了,谢谢! (3认同)
  • 这是正确答案,非常感谢! (2认同)
  • 在两个 Java 版本中都适用的语法是 `address=0.0.0.0:5005` (2认同)

Lui*_*ñoz 11

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

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

2)通过IP地址配置dt_socket而不触及hosts文件(推荐)

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

关于网络故障排除的一句话:
*unknown host表示DNS问题,TCP连接根本没有启动,因为IP地址不可用.
*host unreachable表示TCP连接问题,已知IP但由于防火墙,路由或其他问题而无法访问.ping该IP将失败.
*port unreachable表示TCP连接问题,IP可以访问,但端口不是因为防火墙,服务中断等等ping,IP将工作但是到该端口的连接仍然会失败.