GoLand+Delve(dlv) 远程调试

xiaohai 2021-05-05 21:36:24 1698人围观 标签: Go 
简介GoLand+Delve(dlv) 远程调试

GoLand+Delve(dlv) 远程调试

参考:https://yq.aliyun.com/articles/57578

服务器上安装dlv

Centos按时dlv

git clone https://github.com/go-delve/delve.git $GOPATH/src/github.com/go-delve/delve
cd $GOPATH
go install github.com/go-delve/delve/cmd/dlv

创建软链接

ln -s $GOPATH/bin/dlv /usr/local/bin/dlv

查看版本

[root@localhost bin]# dlv version
Delve Debugger
Version: 1.4.0
Build: $Id: 67422e6f7148fa1efa0eac1423ab5594b223d93b $

示例代码

新建文件test.go

package main

import (
    "fmt"
    "time"
)

const myDate = "2019-05-30 15:13"

var (
    Aa = 81
    Bb = 82
)

func main() {
    fmt.Println("myDate:", myDate)
    func1()
}
func func1() {
    a := 61
    b := 62
    i := 0
    for true {
        fmt.Println("fmt:", i, a, b, Aa, Bb)
        i++
        a += 2
        Aa += 3
        time.Sleep(time.Second)
    }
}

编译成linux可执行文件

SET CGO_ENABLED=0
SET GOARCH=amd64
SET GOOS=linux
go build test.go

编译完成后会生成一个test文件,将文件上传到服务器上并添加可执行权限并允许:

[root@localhost xthk_online_live_go_api]# chmod +x test
[root@localhost xthk_online_live_go_api]# ./test 
myDate: 2019-05-30 15:13
fmt: 0 61 62 81 82
fmt: 1 63 62 84 82

查询运行的进程,并运行dlv监听:

[root@localhost xthk_online_live_go_api]# ps -ef|grep test
root     15380 12630  0 17:05 pts/2    00:00:00 ./test
root     15389  7712  0 17:05 pts/1    00:00:00 grep --color=auto test


[root@localhost xthk_online_live_go_api]# dlv attach 15380 --headless --listen=:2345 --api-version=2 #15380是test的进程ID
API server listening at: [::]:2345

上面介绍的是将本地编译后的文件进行调试,如果我们直接调试服务器上的golang程序,还可以使用debug模式运行:

[root@localhost xthk_online_live_go_api]# dlv debug --headless --listen=:2345 --api-version=2 test.go 
API server listening at: [::]:2345

或者直接运行可执行文件:

[root@localhost xthk_online_live_go_api]# dlv exec --headless --listen=:2345 --api-version=2 ./test
API server listening at: [::]:2345

配置Goland

1、Run
2、Edit Configurations
3、左上角加号
4、Go Remote
5、设置调试名称、配置Host和Port,这个是服务器的地址和dlv监听的端口
6、保存

调试

1、Run
2、Debug
3、选择上面配置的远程调试名称,调试开始

快捷键

1、F9:切换断点
2、F8:继续执行