Java JDB: ERROR: transport error 202: gethostbyname: unknown host
In my case problem was related to Java 8. I used Java 9+ syntax for remote debugger:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
While for Java 8 you cannot use address in format *:port it suppose to be:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
The jvm is trying to open the dt_socket
at host Patricks-iMac.local
, port 50547
but needs first to resolve that host name to an IP address. DNS lookup will fail since it's a dummy hostname assigned to a private address and DNS servers usually don't know about them unless a sysadmin has configured them (companies use to do that). There are two solutions for this:
Add the hostname mapping on hosts file keeping other names configured for that IP
127.0.0.1 localhost Patricks-iMac.local
Configure the dt_socket by IP address without touching hosts file (recommended)
-Xrunjdwp:transport=dt_socket,address=127.0.0.1:50547
A word on networking troubleshooting:
unknown host
means DNS problems, TCP connection did not start at all because an IP address was not available.host unreachable
means TCP connectivity problems, an IP is known but not reachable because of firewall, routing or other problems.ping
to that IP will fail.port unreachable
means TCP connectivity problems, the IP is reachable but the port is not because of firewalls, service is down, etc.ping
to the IP will work but connections to that port will still fail.
A word on security
The following syntaxes imply a security risk since the debug port will be exposed on all interfaces. Mitigation measures might be good to apply.
address=*:5005
address=0.0.0.0:5005
address=5005 (java 8, binds to loopback interface on java 9+)