Delve是Go语言官方维护的原生调试器,支持断点、单步执行、变量查看/修改等功能,是Debian下调试Go程序的首选工具。
go get
命令安装最新版:go get -u github.com/go-delve/delve/cmd/dlv
dlv debug ./main.go
(进入交互式终端);break main.go:10
(在指定行号设置断点);continue
(继续运行至下一个断点)、next
(执行下一行,不进入函数)、step
(进入函数内部);print variable_name
(查看变量值)、set variable_name = new_value
(修改变量值);stack
(显示当前调用堆栈)。GDB是Linux系统下的通用调试器,虽非Go专属,但可通过编译时添加调试信息支持Go程序调试。
sudo apt-get install gdb
-gcflags "-N -l"
禁用优化和内联(保留调试信息):go build -gcflags "-N -l" -o debug-demo debug-demo.go
gdb ./debug-demo
;break main.main
(在main函数设置断点)、run
(启动程序)、next
(单步执行)、print variable_name
(查看变量)。通过VS Code或Goland等IDE,可实现图形化调试,提升效率。
launch.json
文件(位于.vscode
目录):{
"version": "0.2.0",
"configurations": [
{
"name": "Launch",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${workspaceFolder}",
"env": {},
"args": []
}
]
}
F5
键,或点击调试图标→“开始调试”。pprof是Go内置的性能分析工具,可分析CPU、内存使用情况,定位性能瓶颈。
net/http/pprof
包,并启动HTTP服务:import _ "net/http/pprof"
func main() {
go func() {
log.Println(http.ListenAndServe("localhost:6060", nil))
}()
// 程序逻辑
}
go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30
(生成30秒CPU profile);go tool pprof http://localhost:6060/debug/pprof/heap
;-http=:8080
参数启动Web界面(如go tool pprof -http=:8080 ./myprogram
)。通过标准库log
或第三方库(如logrus
)记录程序执行流程,快速定位问题。
import (
"log"
"os"
)
func main() {
log.SetOutput(os.Stdout) // 设置日志输出到终端
log.Println("程序启动") // 记录启动信息
// 程序逻辑
log.Printf("变量值:%d", variable) // 记录变量值
}
logrus
库支持结构化日志(如JSON格式),便于后续分析。通过testing
包编写单元测试,验证代码逻辑的正确性,避免问题积累。
import "testing"
func Add(a, b int) int {
return a + b
}
func TestAdd(t *testing.T) {
result := Add(1, 2)
if result != 3 {
t.Errorf("Add(1, 2) = %d; want 3", result)
}
}
go test
(自动查找_test.go
文件并运行测试)。Go Trace可收集程序运行时的时间线数据,分析goroutine调度、内存分配等情况。
import "runtime/trace"
func main() {
f, _ := os.Create("trace.out")
trace.Start(f)
defer trace.Stop()
// 程序逻辑
}
go tool trace trace.out
(生成可视化界面,展示执行时间线)。编译时保留调试符号,便于调试器获取更多信息(如变量名、行号)。
go build -gcflags "-N -l" -o debug-program main.go
其中-N
禁用优化,-l
禁用内联,确保调试信息完整。