在 Debian 系统上调试 Golang 程序,常用的方法和工具如下,从最基础到专业调试逐步介绍。
fmt.Println / log最简单、最常用:
package main
import "fmt"
func main() {
fmt.Println("debug point 1")
}
适合:
panic / recover用于查看调用栈:
panic("something wrong")
或:
defer func() {
if r := recover(); r != nil {
fmt.Println(r)
}
}()
go test 调试go test -v ./...
带日志:
go test -v -run TestXXX
查看覆盖率:
go test -cover
sudo apt update
sudo apt install golang-delve
或:
go install github.com/go-delve/delve/cmd/dlv@latest
确保:
export PATH=$PATH:$(go env GOPATH)/bin
dlv debug main.go
进入调试界面后:
break main.main
continue
next
print x
dlv attach <pid>
适合:
dlv debug --headless --listen=:2345 --api-version=2
本地使用 VS Code 或 GoLand 连接。
launch.json 示例{
"version": "0.2.0",
"configurations": [
{
"name": "Launch",
"type": "go",
"request": "launch",
"mode": "debug",
"program": "${workspaceFolder}"
}
]
}
支持:
import "log"
log.SetFlags(log.LstdFlags | log.Lshortfile)
import _ "net/http/pprof"
go tool pprof http://localhost:6060/debug/pprof/profile
dlv 无法调试可能是 ptrace 被禁:
sudo sysctl kernel.yama.ptrace_scope=0
或 Docker 中加:
--cap-add=SYS_PTRACE
Debian 自带 Go 可能较旧:
go version
建议安装官方 Go: https://go.dev/dl/
| 场景 | 推荐方式 |
|---|---|
| 快速问题 | fmt / log |
| 单元测试 | go test |
| 复杂逻辑 | Delve |
| 生产服务 | dlv attach / pprof |
| 图形界面 | VS Code |
如果你愿意,可以告诉我:
我可以给你更具体的调试方案。