插件窝 干货文章 Linux下Golang的调试技巧有哪些

Linux下Golang的调试技巧有哪些

调试 main go pprof 119    来源:    2025-05-10

Linux下Golang调试技巧大全

1. 内置调试工具

1.1 GDB调试

# 编译时加入调试信息
go build -gcflags "-N -l" main.go

# 使用gdb调试
gdb ./main

1.2 Delve调试器

# 安装Delve
go install github.com/go-delve/delve/cmd/dlv@latest

# 常用命令
dlv debug main.go       # 启动调试
dlv exec ./main         # 调试已编译程序
dlv attach <pid>        # 附加到运行中的进程

# 调试命令
b main.main            # 设置断点
c                      # 继续执行
n                      # 单步执行(不进入函数)
s                      # 单步执行(进入函数)
p variable             # 打印变量值
bt                     # 查看调用栈

2. 日志调试

2.1 标准库log

import "log"

func main() {
    log.Println("常规日志")
    log.Printf("格式化日志: %s", "value")
    log.Fatal("致命错误,会退出程序") 
}

2.2 第三方日志库

# 常用日志库
go get -u go.uber.org/zap       # Uber高性能日志库
go get -u github.com/sirupsen/logrus  # 结构化日志

3. 性能分析

3.1 CPU分析

import "runtime/pprof"

func main() {
    f, _ := os.Create("cpu.prof")
    pprof.StartCPUProfile(f)
    defer pprof.StopCPUProfile()

    // 你的代码
}

3.2 内存分析

import "runtime/pprof"

func main() {
    f, _ := os.Create("mem.prof")
    defer pprof.WriteHeapProfile(f)

    // 你的代码
}

3.3 使用pprof工具分析

go tool pprof cpu.prof    # 分析CPU性能
go tool pprof mem.prof    # 分析内存使用

# 常用pprof命令
top10      # 查看前10耗时函数
list Func  # 查看函数详情
web        # 生成可视化图表(需要graphviz)

4. 运行时调试

4.1 环境变量

GODEBUG=gctrace=1 ./main  # 跟踪GC行为
GODEBUG=schedtrace=1000 ./main  # 每1000ms输出调度信息

4.2 竞争检测

go build -race main.go    # 编译时加入竞争检测
./main                    # 运行时会检测数据竞争

5. 单元测试调试

go test -v                # 详细输出
go test -run TestFunc     # 运行特定测试函数
go test -cover            # 查看测试覆盖率
go test -coverprofile=cover.out && go tool cover -html=cover.out  # 可视化覆盖率

6. 其他实用技巧

6.1 打印堆栈信息

import "runtime/debug"

func foo() {
    debug.PrintStack()  // 打印当前堆栈
}

6.2 使用panic/recover

func main() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered:", r)
        }
    }()

    panic("something went wrong")
}

6.3 使用go vet静态分析

go vet ./...  # 检查常见错误

这些技巧可以帮助你在Linux环境下高效地调试Golang程序,根据具体问题选择合适的调试方法。