搭建etcd 源码阅读环境:调试etcd

| 分类 分布式系统  | 标签 分布式  分布式一致性  raft  Raft  etcd  go  GoLand  GOPATH  go.mod  GOOS  调试  操作系统  MacOS  linux 

经过上面的两篇文章的梳理,对于go 的依赖管理、环境变量、GoLand 的使用等还是有所熟悉了的

etcd 服务端的入口是./server/main.go;etcdctl 客户端的入口是./etcdctl/main.go

试着在./server/main.go 开始debug 调试分析其启动流程

func main() {
	etcdmain.Main(os.Args)
}

在MacOS 上配置调试选项的时候会出现这样的Error:

Error: Run after build is not possible 
Result binary is going to be incompatible with the OS

再回到一篇学会Golang!,当时在~/.bash_profile 里面加了这个配置

# 注意设置GOOS 很重要,否则后续syscall.Sethostname 等syscall 下面的API 调用都会报错:undefined: syscall.Sethostname
export GOOS="linux"

当时是为了在MacOS 里面仿写Docker,一个教程里面提到的,为了解决那个问题,结果埋下了一个大雷,我的机器是MacOS,但是配置了这个支持linux 的配置,当然在GoLand 里面调试设置的时候就出现上面的报错

将这行配置注释掉,然后执行source ~/.bash_profile 使其生效

再重启GoLand,然后就可以发现可以正常调试了!

这次搭建etcd 的调试环境,一个是GOPATH 与GOROOT 冲突,一个是GOOS 乱设置,两个环境变量的问题搞了我一整天的时间,因为我自己不是很熟悉Golang,之前胡乱配置的东西在今天搞死我了!

peace and love

问题解决了就好!

接下来就可以在GoLand 里面任意调试分析etcd 的源码了

芜湖!起飞!🛫️!




如果本篇文章对您有所帮助,您可以通过微信(左)或支付宝(右)对作者进行打赏!


上一篇     下一篇