为什么要远程调试

有些时候,本地的环境跟线上环境不一致,比如本地开发在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按钮,就可以像本地那样调试你的程序了

最后修改:2022 年 03 月 20 日
如果觉得我的文章对你有用,请随意赞赏