在 Linux 下调试 Golang 程序,常见方式有以下几种,按使用频率和学习曲线从易到难说明:
最简单,新手首选
fmt.Println("debug:", x)
log.Printf("x=%d", x)
或用标准库 log:
import "log"
log.SetFlags(log.LstdFlags | log.Lshortfile)
log.Println("here")
✅ 适合:简单逻辑、线上临时排查
最常用、最强大
go install github.com/go-delve/delve/cmd/dlv@latest
确认:
dlv version
dlv debug main.go
进入交互模式后:
break main.main
continue
next
print x
dlv exec ./myapp
dlv attach <pid>
⚠️ 需要:
ptrace 限制(见后文)| 命令 | 作用 |
|---|---|
break 函数/文件:行 |
打断点 |
continue |
继续执行 |
next |
下一行 |
step |
进入函数 |
print x |
打印变量 |
locals |
当前局部变量 |
stack |
调用栈 |
开发效率最高
launch.json{
"version": "0.2.0",
"configurations": [
{
"name": "Launch",
"type": "go",
"request": "launch",
"mode": "debug",
"program": "${workspaceFolder}"
}
]
}
✅ 支持:
⚠️ Go 对 GDB 支持有限
gdb ./myapp
常见问题:
✅ 仅用于 CGO 或底层问题
报错:
ptrace: Operation not permitted
解决:
sudo sysctl -w kernel.yama.ptrace_scope=0
或:
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
默认已包含,若手动优化:
go build -gcflags="all=-N -l"
pproftrace| 场景 | 推荐 |
|---|---|
| 学习 / 开发 | VS Code + Delve |
| 线上排查 | 日志 / pprof |
| 底层问题 | dlv attach |
| 简单脚本 | fmt.Println |
如果你愿意,可以告诉我:
我可以给你更具体的配置示例。