在 CentOS 上调试 Golang 应用,常用方式有以下几种,按使用频率和可操作性从简单到专业说明:
log / fmt 打印最简单、最常用:
import "log"
log.Println("debug info:", x)
或:
fmt.Printf("x=%v\n", x)
运行:
go run main.go
# 或
go build && ./app
Delve 是 Go 官方推荐的调试器
sudo yum install -y git
go install github.com/go-delve/delve/cmd/dlv@latest
确保 GOPATH/bin 在 PATH:
export PATH=$PATH:$(go env GOPATH)/bin
dlv debug main.go
常用命令:
break main.main # 打断点
continue # 运行
next # 单步
print x # 打印变量
locals # 查看局部变量
exit
dlv exec ./app
dlv debug --headless --listen=:2345 --api-version=2
本地(VS Code / GoLand)连接:
localhost:2345
dlv debug --headless --listen=:2345 --api-version=2
.vscode/launch.json{
"version": "0.2.0",
"configurations": [
{
"name": "Remote",
"type": "go",
"request": "attach",
"mode": "remote",
"remotePath": "/path/to/project",
"port": 2345,
"host": "服务器IP"
}
]
}
import _ "net/http/pprof"
go func() {
http.ListenAndServe("0.0.0.0:6060", nil)
}()
查看:
go tool pprof http://localhost:6060/debug/pprof/profile
import "runtime/trace"
f, _ := os.Create("trace.out")
trace.Start(f)
defer trace.Stop()
分析:
go tool trace trace.out
sudo yum install -y epel-release
sudo rm -rf /usr/local/go
wget https://go.dev/dl/go1.22.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.22.linux-amd64.tar.gz
| 场景 | 推荐方式 |
|---|---|
| 快速定位 | fmt / log |
| 断点调试 | Delve |
| 线上问题 | pprof + trace |
| 远程开发 | VS Code + Delve |
如果你愿意,可以告诉我:
我可以给你一套具体可复制的配置。