服务器是linux
安装delve
go get -u github.com/go-delve/delve/cmd/dlv -v -insecure
或
git clone https://github.com/go-delve/delve.git $GOPATH/src/github.com/go-delve/delve
cd $GOPATH/src/github.com/go-delve/delve
make install
上面的都不行了,我用以下命令成功了
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
参考
https://github.com/go-delve/delve/blob/master/Documentation/installation/linux/install.md
可以用 $GOPATH/bin/dlv
执行 也可以先将dlv放入PATH中
ln -s $GOPATH/bin/dlv /usr/local/bin/dlv
之后可以直接用 dlv
例如 dlv version
服务端启动go程序
示例工程
示例源代码
$GOPATH/src/mytest/main.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)
}
}
编译go程序
go install mytest
运行go程序
nohup bin/mytest >> out.log &
显示
[1] 7148
[root@localhost go]# nohup: ignoring input and redirecting stderr to stdout
数字 7148 就是 pid
此时可以ctrl+c退出, 继续后面的操作
ctrl+c后如果出现了 [1]+ Exit
代码,说明go程序终止了, 可能是go代码错误
dlv attach go程序
dlv attach 7148 --headless --listen=:2345 --api-version=2 --accept-multiclient
GoLand配置
Main menu->Run->Edit Configurations…
- -> Go Remote
Host改成服务器ip
Port: 2345
保存 后 Debug go remote
此时可以设置断点, 在 Variables 面板可以查看变量, 可以点击**+增加Watch**
终止dlv和go程序
dlv不终止, 则 go程序也无法终止
而dlv只能通过终止进程的方式终止掉
kill -9 `ps -ef | grep "dlv|mytest" -E | awk '{print $2}'`
TODO
GoLand Console无法显示fmt.println的信息, 只能继续在shell中查看bin/mytest输出