在 Linux 下调试 Golang 程序,常见方式有 命令行调试(dlv / gdb)、IDE 调试(GoLand / VSCode)、以及日志/pprof 调试。下面按实用程度给你一套完整指南。
go install github.com/go-delve/delve/cmd/dlv@latest
确认:
dlv version
dlv debug ./main.go
进入交互式界面后:
b main.main # 打断点
c # 继续
n # 下一行
s # 进入函数
p varName # 打印变量
bt # 调用栈
dlv exec ./myapp
dlv attach <pid>
服务器:
dlv debug --headless --listen=:2345 --api-version=2
本地 VSCode / GoLand 连 :2345
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch",
"type": "go",
"request": "launch",
"mode": "debug",
"program": "${workspaceFolder}"
}
]
}
直接 F5 即可断点调试。
⚠️ Go 对 gdb 支持不完整(goroutine、channel 不好看)
gdb ./myapp
run
bt
仅适合看 CGO / 崩溃栈。
GOTRACEBACK=all ./app
或:
ulimit -c unlimited
用 dlv core 分析。
import _ "net/http/pprof"
go tool pprof http://localhost:6060/debug/pprof/goroutine
log.Printf("x=%v", x)
❌ CGO 必须:
CGO_ENABLED=1 go build
❌ 优化后变量看不到:
go build -gcflags="all=-N -l"
❌ 容器里调试:
dlv --headless --listen=:40000
如果你愿意,可以告诉我:
我可以直接给你对应命令。