温馨提示×

golang ubuntu调试如何设置

小樊
36
2025-11-22 23:03:49
栏目: 编程语言

Ubuntu 下 Go 调试环境设置指南

一 环境准备与工具安装

  • 安装 Go:建议从官网安装稳定版,解压到如 /usr/local/lib/go,并设置环境变量(示例:GOROOT、GOPATH、GOBIN、GOPROXY、PATH)。完成后执行 go version 验证。
  • 安装调试器 Delve(首选):go install github.com/go-delve/delve/cmd/dlv@latest,确保 dlv$GOPATH/bin$PATH 中可用。
  • 可选安装 GDB:sudo apt-get install gdb,用于通用调试或与 Delve 互补。
  • 小提示:若 apt 安装的 golang-go 缺少开发工具链,后续 go install dlv 可能失败,建议使用官方包或源码安装 Go。

二 本地调试 Delve 与 VS Code

  • 使用 Delve 本地调试
    • 调试当前包:dlv debug . --break main.main(在 main.main 处设断点)。
    • 调试指定文件:dlv debug your_program.go
    • 常用命令:break/continue/step/next/print/backtrace 等。
  • 使用 VS Code 本地调试
    • 安装 VS Code 的 Go 扩展
    • 生成调试配置:在调试面板创建 launch.json,示例:
      • 调试包:{"name":"Launch Package","type":"go","request":"launch","mode":"auto","program":"${workspaceFolder}"}
      • 调试文件:{"name":"Launch File","type":"go","request":"launch","mode":"auto","program":"${workspaceFolder}/main.go"}
    • 在代码行号左侧点击设置断点,F5 启动调试,查看变量、调用栈并可单步执行。

三 远程调试 Delve 与 Goland

  • 远程服务端启动方式一(Headless 附加可执行文件)
    • 构建无 CGO 的 Linux 二进制:CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app main.go
    • 在远程机器启动调试服务:
      • API v2(通用):~/go/bin/dlv --listen=:2345 --headless=true --api-version=2 exec ./app
      • DAP(推荐,VS Code/Goland 新版 DAP 调试):~/go/bin/dlv dap --listen=:12345
  • 远程服务端启动方式二(Headless 调试运行命令)
    • ~/go/bin/dlv --listen=:2345 --headless=true --api-version=2 --log --log-output=debugger,rpc dap --listen=:12345
  • 端口打通
    • 直连:开放服务器 2345/12345 端口(云主机需安全组/防火墙放行)。
    • SSH 隧道:ssh -L 2345:127.0.0.1:2345 -N -i <key> <user>@<host>(本地端口转发到远程)。
  • Goland 远程调试配置
    • 新建 Run/Debug Configuration → 选择 Go Remote → 设置 Host=127.0.0.1Port=2345(或 12345 对应 DAP)→ 启动 Debug。
    • 如用 DAP,Goland 选择 Go (DAP) 类型或确保 Debug Adapter 为 dlv-dap
  • VS Code 远程 DAP 配置示例
    • {"name":"Connect to remote","type":"go","debugAdapter":"dlv-dap","request":"launch","port":12345,"host":"127.0.0.1","mode":"exec","program":"/abs/path/to/app"}
  • 重要一致性要求
    • 本地源码必须与远程运行的二进制完全一致(行号/变量映射依赖一致)。

四 远程调试 Delve 与 VS Code

  • 远程服务端启动方式一(Headless 附加可执行文件)
    • 构建无 CGO 的 Linux 二进制:CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app main.go
    • 在远程机器启动调试服务:
      • API v2(通用):~/go/bin/dlv --listen=:2345 --headless=true --api-version=2 exec ./app
      • DAP(推荐,VS Code/Goland 新版 DAP 调试):~/go/bin/dlv dap --listen=:12345
  • 远程服务端启动方式二(Headless 调试运行命令)
    • ~/go/bin/dlv --listen=:2345 --headless=true --api-version=2 --log --log-output=debugger,rpc dap --listen=:12345
  • 端口打通
    • 直连:开放服务器 2345/12345 端口(云主机需安全组/防火墙放行)。
    • SSH 隧道:ssh -L 2345:127.0.0.1:2345 -N -i <key> <user>@<host>(本地端口转发到远程)。
  • VS Code 远程 DAP 配置示例
    • {"name":"Connect to remote","type":"go","debugAdapter":"dlv-dap","request":"launch","port":12345,"host":"127.0.0.1","mode":"exec","program":"/abs/path/to/app"}
  • 重要一致性要求
    • 本地源码必须与远程运行的二进制完全一致(行号/变量映射依赖一致)。

五 常见问题与排查

  • Delve 安装失败:若通过 apt 安装的 golang-go 缺少开发头文件和工具链,改用官方包安装 Go 后再 go install dlv@latest
  • 断点不生效或无法命中断言:确保本地与远程代码完全一致;必要时清理并重新构建二进制。
  • 端口连不上:检查云主机安全组/防火墙、服务器监听地址是否为 0.0.0.0 或正确回环;优先用 SSH 隧道验证连通性。
  • 使用 GDB 的局限:GDB 可调试 Go 程序,但对 goroutine、调度器等支持不如 Delve 精细,生产问题优先用 Delve。

0