delve 是 go 官方推荐的调试器,支持本地/远程/测试调试,可设断点、查变量、追踪协程与内存;安装用 go install,调试需保留符号表,配合 ide 效率更高。

Delve 是 Go 官方推荐的调试器,比传统 print 调试更高效、精准,尤其适合追踪变量生命周期、协程状态和内存行为。
安装与基础启动
Delve 支持本地调试、远程调试和测试调试。安装只需:
- 运行 go install github.com/go-delve/delve/cmd/dlv@latest(Go 1.21+)
- 确保 $GOPATH/bin 在系统 PATH 中
- 在项目根目录执行 dlv debug 启动调试会话;若调试已编译二进制,用 dlv exec ./myapp
断点设置与变量查看
调试中常用命令简洁直接:
- b main.main 或 b utils.go:15 设置函数入口或行号断点
- p username 打印变量值;p &user 查看地址;p user.Name 访问结构体字段
- vars 列出当前作用域所有局部变量;locals 更聚焦于函数内变量
- 进入函数后可用 stack 查看调用栈,确认变量所属上下文
协程与内存相关追踪
Go 的并发模型让变量追踪更复杂,Delve 提供专属支持:
立即学习“go语言免费学习笔记(深入)”;
- goroutines 列出全部 goroutine 及其状态(running / waiting / idle)
-
goroutine
bt 切换到指定 goroutine 并查看其堆栈,进而检查该协程内的变量值 - memstats 查看实时内存统计,辅助判断变量是否被意外持有导致泄漏
- 对疑似泄漏的变量,可用 print runtime.ReadMemStats 获取详细分配信息
调试技巧与避坑提示
实际使用中几个关键细节常影响调试效率:
- 编译时避免加 -ldflags="-s -w",否则丢失符号表,Delve 无法解析变量名和源码位置
- 调试 HTTP 服务时,用 dlv debug --headless --api-version=2 --accept-multiclient --continue 启动无界面服务,再配合 VS Code 或 Goland 连接
- 对 interface{} 类型变量,用 p *(**T)(unsafe.Pointer(&v)) 强转查看底层值(需谨慎,仅限调试)
- watch 点不支持动态表达式,但可结合 on
p x 实现“断点触发即打印”效果










