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禁用內聯,確保調試信息完整。