从MacOS goland无法debug到dns无法解析localhost

背景

MacOS 13.0.1

GoLand2022.2

GoLand开发golang项目,可以run,但是无法debug...

复制代码
​
/Applications/GoLand.app/Contents/plugins/go/lib/dlv/mac/dlv --listen=10.xx.xxx.129:63466 --headless=true --api-version=2 --check-go-version=false --only-same-user=false exec /private/var/folders/7p/dsbvg0k54139kxmr4fyd864w0000gn/T/GoLand/___go_build_codeup_aliyun_com_607fcd17c06031c0ebd327fc_canopia_be_business_cmd_rpc 

couldn't start listener: listen tcp 10.xx.xxx.129:63466: bind: can't assign requested address
Debugger finished with the exit code 1

​

解决思路

  1. debug无法找到正确的本地IP地址,尝试修改 /etc/hosts 强行指定

  2. goland dlv 强行指定debug进程启动时候的listen地址为127.0.0.1 (无法配置)

分析

1.日志中出现的IP,可以发现是远程dns的服务器VIP(多个ip轮巡)

2.测试 `ping localhost` ,发现解析出来的地址不是 127.0.0.1 ,还是远程dns的ip

3.尝试通过修改 /etc/hosts 和 /etc/resolv.conf 文件

  • /etc/hosts 理论上是优先级最高的配置,但是可能被一些信息安全工具修改

  • /etc/resolv.conf 一般自动修改,不需要手动,但是也可能被工具修改

尝试手动修改2个文件,发现还是不生效

4.尝试清理dns缓存,保证 /etc/hosts 生效

复制代码
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

清理后并没有效果...

5.尝试在 /etc/hosts 文件中配置其他,比如

复制代码
10.xx.xx.104 github.com

ping github.com 的时候无法解析到 10.xx.xx.104

6.问题逐渐变成 /etc/hosts 为什么不生效?

7.Google & chatgpt 查询,得到了一些可能的问题

  • 需要保证 /etc/hosts 是属于 root 用户 wheel 组,并且权限是644

    sudo ls -l /etc/hosts

    -rw-r--r--@ 1 root wheel 2110 8 7 22:02 /etc/hosts

  • 保证mac的网络配置是关闭自动ipv6的,使用仅本地连接

  • 某些操作系统版本,严格限制 /etc/hosts 内容的格式(或者说是bug),才会生效

要求key value之间只能有一个空格...或者tab(一个或者多个),无法混用

复制代码
# 每行的key value只能有一个空格,或者一个/多个 tab
127.0.0.1	localhost
255.255.255.255	broadcasthost
::1	localhost

解决

上面分析中需要保证的部分全部修改,之后 /etc/hosts 立刻生效;

结论:

  1. goland dlv启动本地debug进程默认是localhost,并且无法修改

2./etc/hosts 文件修改是立刻生效的,如果不生效,说明文件本身存在问题

相关推荐
心灵宝贝8 小时前
Mac Unity 2018.dmg游戏工具 安装步骤 简单易懂教程(附安装包)
macos·unity·游戏引擎
百***480710 小时前
【Golang】slice切片
开发语言·算法·golang
q***925110 小时前
Windows上安装Go并配置环境变量(图文步骤)
开发语言·windows·golang
学习非暴力沟通的程序员18 小时前
Mac 自动定时打开指定URL(无日历版)操作文档
macos
稚辉君.MCA_P8_Java21 小时前
通义 Go 语言实现的插入排序(Insertion Sort)
数据结构·后端·算法·架构·golang
源代码•宸21 小时前
GoLang写一个简单版生命游戏模拟器
经验分享·笔记·学习·游戏·golang
q***017721 小时前
Linux 下安装 Golang环境
linux·运维·golang
稚辉君.MCA_P8_Java1 天前
Gemini永久会员 Go 实现动态规划
数据结构·后端·算法·golang·动态规划
柠石榴1 天前
go-1 模型
开发语言·后端·golang
想搞艺术的程序员1 天前
深入 NSQ 延迟消息实现原理:设计巧思与性能优化
性能优化·golang·nsq