温馨提示×

golang linux调试如何配置

小樊
40
2026-10-12 23:25:42
栏目: 编程语言

下面按常见场景给你一份 Go 在 Linux 下的调试配置指南,从最常用到进阶,你可以按需取用。


一、基础准备(必做)

1. 安装 Go

go version

推荐 Go 1.20+

2. 关闭编译优化(非常重要)

调试时务必加:

go build -gcflags="all=-N -l"
  • -N:禁用优化
  • -l:禁用内联

或运行:

go run -gcflags="all=-N -l" main.go

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

1. 安装 Delve

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

确认:

dlv version

2. 本地调试

调试当前程序

dlv debug main.go

常用命令:

b main.main          # 打断点
b 文件名:行号
c                   # 继续
n                   # 单步
s                   # 步入
p 变量名             # 打印变量
bt                  # 调用栈

3. 调试已编译的二进制

dlv exec ./app

4. 附加到运行中的进程(线上常用)

dlv attach <pid>

查看 pid:

ps aux | grep app

三、VS Code + Linux 调试(最推荐)

1. 安装插件

  • Go(官方插件)
  • Delve 会自动使用

2. launch.json 示例

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch",
      "type": "go",
      "request": "launch",
      "mode": "debug",
      "program": "${workspaceFolder}",
      "args": [],
      "env": {},
      "buildFlags": "-gcflags=all=-N -l"
    }
  ]
}

3. 远程调试(Linux 服务器)

在服务器:

dlv debug --headless --listen=:2345 --api-version=2

本地 VS Code:

{
  "name": "Remote",
  "type": "go",
  "request": "attach",
  "mode": "remote",
  "remotePath": "/path/to/project",
  "port": 2345,
  "host": "服务器IP"
}

四、日志 & Panic 调试

1. Panic 定位

GOTRACEBACK=all ./app

2. 打印调用栈

import "runtime/debug"

debug.PrintStack()

五、常见坑

问题 解决
断点不生效 没加 -N -l
attach 失败 dlv 需同用户或 root
容器里调试 需 SYS_PTRACE 权限
CGO 程序 用 dlv exec 更稳定

六、Docker 中调试(简要)

RUN go install github.com/go-delve/delve/cmd/dlv@latest
CMD ["dlv", "exec", "./app", "--headless", "--listen=:2345"]

运行容器:

docker run --cap-add=SYS_PTRACE -p 2345:2345 app

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

  • ✅ 是否用 VS Code / Goland
  • ✅ 是否 本地 / 远程 / Docker
  • ✅ 是否 Web / 微服务 / CLI

我可以直接给你一套可复制的配置。

0 踩