delve 是 Go 语言专用的调试器。这里记录安装、启动方式和常用命令。
安装 delve
安装
delve先确认机器上有 Go 环境,然后执行:
shgo install github.com/go-delve/delve/cmd/dlv@latest安装后,
delve的二进制文件会放在$GOPATH/bin目录下。如果$GOPATH/bin不在你的PATH中,需要手动添加,或者使用完整路径运行delve。验证安装
打出版本号说明装好了:
shdlv version
启动 delve
delve 支持几种启动模式,包括直接调试程序、调试已编译程序、附加到运行中的进程等。
直接调试程序
使用
dlv debug命令可以编译并调试当前目录下的 Go 包(在main.go所在目录直接运行即可;也可传入包路径,如dlv debug ./cmd/app):shdlv debug这会编译并启动程序,并进入调试模式。注意
dlv debug接收的是包路径,不能直接传源文件名。调试已编译程序
如果程序已经编译,可以使用
dlv exec命令调试:shdlv exec <your_program>附加到运行中的进程
可以使用
dlv attach附加到已经运行的 Go 程序进程:shdlv attach <pid>
基本调试命令
常用的调试命令:
设置断点
shbreak <location><location>可以是文件名和行号(例如main.go:10)或函数名(例如main.main)。- 示例:
break main.go:15或break main.main
继续执行
shcontinue继续程序的执行,直到下一个断点或程序结束。
单步执行
shstep进入函数内部并执行下一行代码。
跳过当前行
shnext执行当前行代码,但不进入函数内部。
跳出当前函数
shstepout执行到当前函数返回为止。
打印变量值
shprint <variable>打印指定变量的当前值。可以是局部变量、全局变量或结构体字段。
查看调用栈
shstack显示当前的调用栈,包括函数调用的顺序。
查看当前作用域的局部变量
shlocals显示当前函数的局部变量。
查看当前函数的参数
shargs显示当前函数的参数。
列出源码
shlist显示当前断点附近的源代码。可以指定行号或函数名来查看特定区域。
高级调试技巧
条件断点
条件成立时才中断:
shbreak <location> if <condition>例如:
break main.go:10 if x > 5查看 Goroutines
使用
goroutines命令查看所有 Goroutine 的状态:shgoroutines可以选择附加到特定 Goroutine 进行调试。
观察表达式
使用
watch命令设置观察点,观察特定表达式的变化:shwatch <expression>例如:
watch x > 5管理断点
- 列出所有断点:
breakpoints - 删除断点:
clear <location>
- 列出所有断点:
自定义调试配置
在 IDE(如 VSCode)里调试时,
delve由 IDE 的调试配置文件(如.vscode/launch.json)驱动,断点和变量面板直接可用。
示例调试会话
假设有一个简单的 Go 程序 main.go:
package main
import "fmt"
func main() {
x := 10
y := 20
result := add(x, y)
fmt.Println(result)
}
func add(a, b int) int {
return a + b
}用 delve 调这个程序:
启动调试
在
main.go所在目录运行:shdlv debug在
delve提示符下sh(dlv) break main.go:9 (dlv) continue (dlv) print x (dlv) print result (dlv) step这些命令在
fmt.Println(result)处设置断点(此时result已被赋值为 30),继续执行程序并查看变量值。
总结
断点、单步、变量查看、条件断点、goroutine 列表,delve 的命令覆盖了调试 Go 程序的主要动作。装好以后 dlv debug 进去,剩下的就是命令行交互。