使用 delve 调试 Go 代码可以帮助你逐步分析问题,delve需要go1.21
或以上版本支持。
1. 安装 delve
通过以下命令安装:
go install github.com/go-delve/delve/cmd/dlv@latest
dlv --version
2. 调试测试文件,运行 delve
# 进入项目中,包含_test.go文件的目录。在终端中运行,启动 delve后它监听端口 2345
cd /routers/
dlv test --headless --listen=:2345 --api-version=2 --log
或者
# 尝试指定要调试的包路径(未实际使用)
dlv test github.com/cloudreve/Cloudreve/v3/routers --headless --listen=:2345 --api-version=2 --log
3. 连接 delve
打开另一个终端窗口中,连接到 delve:
# 例如:/routers/router_test.go文件中,包含Test测试函数
cd /routers/
dlv connect :2345
4. 设置需要调试的函数
例如:/routers/router_test.go文件中,包含函数
func TestPing(t *testing.T) {
asserts := assert.New(t)
router := InitMasterRouter()
w := httptest.NewRecorder()
req, _ := http.NewRequest("GET", "/api/v3/site/ping", nil)
router.ServeHTTP(w, req)
assert.Equal(t, 200, w.Code)
asserts.Contains(w.Body.String(), "Pong")
}
运行 continue
(dlv) continue
此时会定位到函数名,等待运行指定的函数
5. 完整运行函数
如果不用过程跟踪,直接运行完毕此函数,可用如下命令:
# 继续写 continue
(dlv) continue
# 此时会执行完毕指定函数,并且中第一个终端中,输出执行的日志内容
6. 分步运行函数
如果想跟踪运行每行,可用以下命令:
`next` 或 `n`:执行下一行代码。
`step` 或 `s`:进入函数内部。
`continue` 或 `c`:继续运行直到下一个断点或程序结束。
7. 查看变量值
使用 print
或 p
查看当前变量的值:
(dlv) print mockDB
或者
(dlv) p mockDB
8. 退出
(dlv) exit
9. 调试main.go文件
# 直接运行指定文件
dlv debug main.go
运行后会输出日志
注意
在使用 dlv debug
调试 Go 代码时,dlv
工具需要调试的目标文件必须是一个 可执行包,也就是包含 main
函数的 Go 包。
10. 另外一种方式运行dlv
在包含_test.go文件的目录下,直接运行
dlv test
就可以进入(dlv)命令行
或者指定目录
dlv test ./routers