0. 概述
在编写 Go 代码的时候,因为很多时候都是需要调试服务器上的代码的,作为一个年长的工程师,肯定不能用 log.Printf
来调试问题,所以我选择了 delve 这个工具,通过 delve 我可以像本地调试代码一样在 Goland 中调试 Go 代码,很是惬意。如果要说缺点的话,那就是在服务端启动 delve 的 server 端之后,必须在一定时间内(不知道具体多久)连接上它,不然会关闭;同时,在我断开调试之后,server 会自动关闭,如果我要再次调试,那就必须再运行一次 server(当然,可以通过不关闭 debug 解决,就是不太友好)。
具体使用 delve 调试还是比较简单的,只需要两步:
1. 安装 delve
[root@liqiang.io]# go get -u github.com/go-delve/delve/cmd/dlv
2. 正确编译代码
[root@liqiang.io]# go build -gcflags "all=-N -l" github.com/app/demo
3. 调试代码
方式一:调试运行中的进程
运行 delve 服务器有几种形式,可以是用 delve 运行 Go 代码,也可以是运行可执行程序,也可以是侵入一个运行中的 Go 程序,一般来说,attach 一个运行中的 Go 程序比较常见:
[root@liqiang.io] dlv attach $PID --headless --api-version=2 --log --listen=:2345
这样 delve 服务器就起来了,然后继续下一步就是 Goland 连接调试。
在 Goland 中连接 delve 服务器
直接在 Goland 中配置 Host 和 Port 即可,然后在源代码中选择这个 “Go Remote” 调试器进行调试:
方式二:启动调试进程
[root@liqiang.io]# dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient exec ./demo
4. 注意点:
- Go 代码需要加上编译选项:
-gcflags='all=-N -l'
,这个 Goland 也会提示你; - 不一定要用 Goland 调试,你也可以在本地执行
delve connect
来连接调试。