服务端设置
前提你得提起在服务端安装好go,安装过程就不赘述了。
- 首先拉去你要调试的代码到服务端(也可以不用拉去,从本地的goland直接推送到服务端也是可以的)。
- 安装dlv工具,
go install github.com/go-delve/delve/cmd/dlv@latest
。如果install后,dlv --help提示找不到dlv指令,请检查GOPATH是否正确设置。如果没有那咱们手动配置下即可。export PATH=$GOPATH/bin:$PATH
dlv如何来配合调试呢?
两种方式,第一种是先启动我们要调试的程序。第二种是要调试的程序和dlv工具一起启动
1.第一种,先启动待调试的程序,例如[root@i-pvirg1hu ~]# ./v2ray run -config /etc/v2ray/config.json -confdir /etc/v2ray/conf
;接着启动dlv,启动命令行dlv attach 29365 --headless --api-version=2 --log --listen=:2345
这里的29365为待调试程序的进程id。
2.第二种,将第一种两个过程合并在一起dlv --headless --api-version=2 --log --listen=:2345 exec ./v2ray -- run -config /etc/v2ray/config.json -confdir /etc/v2ray/conf API server listening at: [::]:2345
我这里实验用的是第二种,效果如下图
注意:这里我们待调试的程序是v2ray,要用dlv调试,那么要禁用内敛优化,即编译go程序的时候要加上-gcflags "all=-N -l"
。即我这里的编译指令为GO_ENABLED=0 go build -o $HOME/v2ray -trimpath -gcflags "all=-N -l" ./main
goland端配置
配置sftp![在这里插入图片描](https://i-blog.csdnimg.cn/direct/d3260e505b084f1bb62a9206f5eea77e.png)
以上两步之后,还需要配置下ssh,因为等下本地改了代码要推送到服务端。
这里可以一键推送(注意此处的推送并非git push别混淆了)
配置远程debug
这里主要是配置dlv listen的host和port。注意别和我们待调试程序的host和port混淆了
开始在本地的goland开始debug
在本地的需要调式的代码处打好断点,开始调试
不得不说,dlv是真的nice。