MacOS终端启动JDB遇transport error 202问题求助
嘿,我注意到你在MacOS上直接用终端运行JDB时碰到了棘手的问题——和那篇帖子的报错类似,但添加127.0.0.1 my-host-name到hosts文件的方案没起作用。先把你遇到的错误信息明确下来:
Initializing jdb ...
run run QuadtreeBitmap VM start exception: VM initialization failed for: /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
ERROR: transport error 202: gethostbyname: unknown host ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510) JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [debugInit.c:730]
Fatal error: Target VM failed to initialize.
既然常规的hosts映射没用,试试下面这几个方向:
强制JDB绑定localhost,绕过主机名解析
启动JDB时直接指定用localhost而非你的主机名,避免系统解析出问题。你可以:- 先手动启动带调试参数的目标程序,指定localhost:
java -Xdebug -Xrunjdwp:transport=dt_socket,address=localhost:5005,suspend=y QuadtreeBitmap - 再新开一个终端用JDB连接这个端口:
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=5005
- 先手动启动带调试参数的目标程序,指定localhost:
完善hosts文件的IPv4+IPv6映射
只加IPv4的localhost映射可能不够,把IPv6的地址也加上,同时刷新DNS缓存:- 编辑
/etc/hosts文件,添加:127.0.0.1 localhost Patricks-iMac.local ::1 localhost Patricks-iMac.local - 执行命令刷新缓存:
sudo dscacheutil -flushcache - 重启终端后再试JDB。
- 编辑
检查JDK版本与权限
你用的是JDK 9.0.4,这个版本的JDWP在MacOS上确实存在一些小问题:- 试试切换到LTS版本的JDK(比如JDK 8或JDK 11),重新测试JDB启动;
- 检查JDK安装目录的权限,确保
/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk及子文件对当前用户有读写权限。
手动指定IP地址执行run命令
在JDB交互界面里,直接把主机名换成127.0.0.1来执行run:jdb > run -Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:50547,suspend=y QuadtreeBitmap
这些方法应该能帮你绕开主机名解析的坑,解决JDB启动失败的问题。
内容的提问来源于stack exchange,提问作者ptk

