go项目中使用Delve调试工具(测试工具)

186 阅读2分钟

使用 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. 查看变量值

使用 printp 查看当前变量的值:

(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