Delve是Go语言官方维护的原生调试器,针对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(设置断点)、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、内存瓶颈及goroutine泄漏等问题。
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 http://localhost:6060/debug/pprof/heap获取内存快照;top、list等命令查看内存占用最高的函数。通过日志输出程序执行流程和变量状态,是简单有效的调试手段。
import ( "log" "os" ) func main() { log.SetOutput(os.Stdout) // 输出到标准输出 log.Println("程序启动") // 打印日志 // 程序逻辑 } 编写单元测试可快速验证代码逻辑的正确性,避免引入外部依赖。
testing包编写测试函数(以Test开头):import "testing" func TestAdd(t *testing.T) { result := Add(1, 2) if result != 3 { t.Errorf("Add(1, 2) = %d, want 3", result) } } go test -v ./... # 运行当前目录及子目录的所有测试 -run参数指定测试函数(如go test -v -run TestAdd),或在测试代码中设置断点,通过Delve或IDE调试测试过程。编译时添加调试信息,可提升调试工具的效果。
-gcflags="-N -l"编译,保留变量名、行号等调试信息:go build -gcflags="-N -l" -o debug-binary main.go go tool nm查看二进制文件的符号表(如函数名、变量名),辅助调试:go tool nm ./debug-binary go tool objdump反汇编二进制文件,查看底层指令:go tool objdump ./debug-binary 以上技巧覆盖了Debian下调试Go程序的常用场景,可根据具体需求选择合适的工具(如Delve用于交互式调试、pprof用于性能分析、IDE用于可视化操作),结合日志记录和单元测试,能快速定位和解决代码问题。