Nomad源码阅读的远程调试环境搭建
简要记录远程调试环境搭建,方便调试,阅读Nomad源码。
环境
Remote
VMWare 14
- 虚拟机 Ubuntu 18.04
虚拟机名local-dev2
,IP地址192.168.237.200
。
Local
Windows 10 Pro,IP地址192.168.237.1
。
工具
VMWare 14
GoLand 2018.2.2 (自带delve调试工具)
Xshell,SSH密钥连接虚拟机local-dev2
前置条件
本地Windows安装Go,并配置环境。
如:本地环境配置为
GOROOT=G:\Go
,GOPATH=G:\Go\gopath
拉取Nomad源码到
GOPATH
下相应目录G:\Go\gopath\src\github.com\hashicorp\nomad
。注意一定要是%GOPATH%\src
目录下,方便GoLand引用nomad\vendor
下的依赖。GoLand导入
nomad
项目确保导入vendor依赖
可以运行某个单元测试,试试是否运行,编译依赖是否解决。
安装插件Remote Hosts Access
虚拟机Ubuntu安装Go,并配置环境
例如,
GOROOT=/snap/go/2635
,GOPATH=/root/go
虚拟机Ubuntu中拉取代码到路径
/root/go/src/github.com/hashicorp/nomad/
下。虚拟机Ubuntu中安装delve,并配置到
PATH
中,即将/root/go/bin/
配置到PATH
中。安装delve
go get -u github.com/derekparker/delve/cmd/dlv
编译用于delve调试的可执行文件
go build -gcflags "all=-N -l" github.com/hashicorp/nomad
此时,生成的可执行文件
nomad
在/tmp/root
路径下
远程调试
配置Go Remote远程调试
并在源码中设置断点,至少在一处关键代码中设置断点,方便程序运行时停下。
虚拟机Ubuntu中执行以下命令,启动server及client
/tmp/root/nomad agent -dev
虚拟机Ubuntu,再开一个标签,设置delve监听。
找到启动的nomad的PID进程号,此处为
10134
ps aux | grep nomad
配置dlv,在
2345
端口监听与GoLand通信远程调试此时,返回GoLand客户端,查看Debug窗口中,是否显示正确通信了。
虚拟机Ubuntu,再开一个标签,提交job。
nomad init
会生成example.nomad
cd /root/tmp /root/tmp/nomad init /root/tmp/nomad run example.nomad
此时,如果顺利,即处于监听状态,返回GoLand客户端,在断点处暂停。
返回GoLand客户端,调试阅读代码。