为什么要远程调试
有些时候,本地的环境跟线上环境不一致,比如本地开发在windows,而实际上项目运行可能需要Linux环境,再比如在调试服务的时候,本地无法模拟出各种线上的环境,比如数据库,注册发现等等,甚至,网络环境线上和线下环境不一致,因此,这个时候,我们就需要远程调试了。
什么是delve
说白了,这个是一个Golang的调试工具,具体可看官方解释:
Delve is a debugger for the Go programming language. The goal of the project is to provide a simple, full featured debugging tool for Go. Delve should be easy to invoke and easy to use. Chances are if you're using a debugger, things aren't going your way. With that in mind, Delve should stay out of your way as much as possible.
Github:https://github.com/go-delve/delve
安装delve
安装
go install github.com/go-delve/delve/cmd/dlv@latest
验证安装
dlv version
测试项目准备
这里可以不跟着做,只是演示而已
新建一个简单的项目,代码如下吧:
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
fmt.Printf("debug test i:%d\n", i)
}
}
Goland配置
本文的Goland装了中文语言包(英语菜,体谅下),英文原版照着参考就是了
配置远程主机
工具 -> 部署 -> 配置
选择SFTP,名称你看着来
如果没有配置ssh的话添加一个ssh配置,填写你的远程服务器地址
映射,本地和远程目录根据实际情况填写:
右键项目,点击部署,将项目上传到远程主机,亦可设置自动同步
连接主机验证下是否上传成功
kakkk@kakkk:~/go/src/kakkk/debug_test$ ls
go.mod main.go
至此,远程主机配置完成
远程调试配置
添加一个Go Remote配置
填写你的远程主机ip地址
使用delve进行调试
使用delve编译调试
在远程主机上执行:
dlv debug --headless --listen=:2345 --api-version=2 --accept-multiclient
接着会提示等待连接:
API server listening at: [::]:2345
2022-03-20T08:14:43Z warning layer=rpc Listening for remote connections (connections are not authenticated nor encrypted)
自行编译调试
根据项目实际情况进行编译
go build
调试
dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient exec {启动命令}
# e.g
# dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient exec ./debug_test
成功后同样会提示等待连接
API server listening at: [::]:2345
2022-03-20T08:20:10Z warning layer=rpc Listening for remote connections (connections are not authenticated nor encrypted)
远程调试
打断点,点击Debug按钮,就可以像本地那样调试你的程序了