温馨提示×

linux golang怎么调试

小樊
39
2026-10-18 19:55:19
栏目: 编程语言

在 Linux 下调试 Golang 程序,常见方式有以下几种,按使用频率和学习曲线从易到难说明:


一、基础调试(打印日志)

最简单,新手首选

fmt.Println("debug:", x)
log.Printf("x=%d", x)

或用标准库 log:

import "log"
log.SetFlags(log.LstdFlags | log.Lshortfile)
log.Println("here")

✅ 适合:简单逻辑、线上临时排查


二、使用 Delve(推荐,Go 官方调试器)

最常用、最强大

1. 安装 Delve

go install github.com/go-delve/delve/cmd/dlv@latest

确认:

dlv version

2. 调试方式

(1)直接运行并调试

dlv debug main.go

进入交互模式后:

break main.main
continue
next
print x

(2)调试已编译程序

dlv exec ./myapp

(3)附加到正在运行的进程

dlv attach <pid>

⚠️ 需要:

  • 同用户或 root
  • 关闭 ptrace 限制(见后文)

3. 常用 dlv 命令

命令 作用
break 函数/文件:行 打断点
continue 继续执行
next 下一行
step 进入函数
print x 打印变量
locals 当前局部变量
stack 调用栈

三、VS Code 调试(图形化,强烈推荐)

开发效率最高

1. 安装

  • VS Code
  • 插件:Go

2. 配置 launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch",
      "type": "go",
      "request": "launch",
      "mode": "debug",
      "program": "${workspaceFolder}"
    }
  ]
}

✅ 支持:

  • 断点
  • 变量查看
  • 单步调试
  • goroutine 查看

四、使用 GDB(不推荐但可用)

⚠️ Go 对 GDB 支持有限

gdb ./myapp

常见问题:

  • goroutine 看不到
  • 变量名被优化

✅ 仅用于 CGO 或底层问题


五、常见 Linux 环境问题

1. ptrace 被限制

报错:

ptrace: Operation not permitted

解决:

sudo sysctl -w kernel.yama.ptrace_scope=0

或:

echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope

2. 编译时保留调试信息

默认已包含,若手动优化:

go build -gcflags="all=-N -l"

六、生产环境调试建议

  • ❌ 不要直接 dlv attach 线上
  • ✅ 使用:
    • pprof
    • trace
    • 日志 + 监控

七、快速选择建议

场景 推荐
学习 / 开发 VS Code + Delve
线上排查 日志 / pprof
底层问题 dlv attach
简单脚本 fmt.Println

如果你愿意,可以告诉我:

  • 你是 新手还是老手
  • 用 VS Code / Vim / 纯终端
  • 是 本地调试还是服务器调试

我可以给你更具体的配置示例。

0 踩