商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > golang ubuntu调试如何设置

golang ubuntu调试如何设置

  发布于2026-07-10 阅读(0)

扫一扫,手机访问

在实际的Go开发中,环境配置往往是第一道坎。尤其是调试环境,搞不好就让人卡在排查问题的半路上。这篇文章就来一步步梳理,在Ubuntu下如何搭建一个顺手的Go调试环境,从本地到远程,从命令行到IDE,尽可能一步到位。

golang ubuntu调试如何设置

环境准备与工具安装

安装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,虽然它对 Goroutine 和调度器的支持不如 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` 这些,上手很快。

如果更习惯用 IDE,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

本地搞定了,远程场景就稍微复杂一些。先要在远程机器上启动调试服务,方式有不少,这里先说最常用的一种。

首先构建一个无 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 协议(Goland 和 VS Code 新版都推荐):

~/go/bin/dlv dap --listen=:12345

还有一种方式是一步到位,把调试器和远程程序一起跑起来:

~/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  @

对于 Goland 用户,新建一个 Run/Debug Configuration,类型选 Go Remote,Host 填 127.0.0.1,Port 填 2345(或 12345,取决于你用的是 DAP 还是 API v2),然后启动 Debug 即可。如果用的是 DAP 协议,Goland 可以选 Go (DAP) 类型,确保 Debug Adapter 为 dlv-dap。

还有一点非常关键:本地源码必须与远程运行的二进制完全一致,否则行号映射会乱掉,变量值也可能错位。这是调试领域最容易踩的坑。

远程调试:Delve 与 VS Code

第四章节的内容其实和前面高度重叠,毕竟远程调试的核心逻辑是一样的。但对于 VS Code,配置上有一些细微差别。

启动远程调试服务的方式与前面完全相同,无论是 API v2 还是 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"
}

需要特别注意,`program` 字段要填远程机器上二进制文件的绝对路径,不是本地的路径。这也是一个很容易被忽略的点。

再次强调:本地源码必须与远程二进制完全一致,否则断点不生效、变量显示异常这种问题会非常难排查。

常见问题与排查

Delve 安装失败?绝大多数情况下是因为系统自带的 `golang-go` 包缺失开发工具链。解决方法是改用官方包安装 Go,然后再执行 `go install dlv@latest`,基本一次搞定。

断点打上了却完全不停?或者断言命中了但代码跳到了奇怪的位置?十有八九是本地代码与远程二进制不一致。清理掉旧文件,重新编译一次试试。

端口连不上?首先检查云主机安全组和防火墙有没有放行对应端口,其次确认服务器监听地址是不是 `0.0.0.0` 或正确的回环地址。实在不行,先用 SSH 隧道验证一下连通性,往往能快速定位问题。

至于 GDB,虽然也能调试 Go 程序,但它的设计初衷不是针对 Goroutine 和 Go 调度器的,所以对 Go 语言的支持远不如 Delve 细腻。有生产环境问题需要排查时,优先把 Delve 作为第一选择。

本文转载于:https://www.yisu.com/ask/92272295.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注