GoLand 2026.3 Help

使用调试器附加到正在运行的 Go 进程

在 GoLand 中,您可以将调试器附加到正在运行的 Go 进程 在本地计算机上、 在远程计算机上或 在 Docker 容器中。

附加到本地计算机上的进程

您可以调试从命令行启动的应用程序。 在这种情况下,应用程序运行在 IDE 之外,但在同一台本地计算机上。 要调试应用程序,您需要在 IDE 中打开项目并将调试器附加到正在运行的进程。

可以使用 GitHub 上的示例 Go 应用程序来按照这些步骤操作。

步骤 1。 安装 gops 包

  • 打开 终端 工具窗口(视图|工具窗口|终端 ),并运行以下命令:

    go install github.com/google/gops@latest
  • 点击 运行 | 附加到进程 (Ctrl+Alt+F5)。 在通知窗口中,点击 调用 'go get gops' 链接。

步骤 2。 构建并运行应用程序

  1. 打开 终端 工具窗口(视图|工具窗口|终端 ),并在禁用编译器优化和内联的情况下构建应用程序:

    go build -gcflags="all=-N -l" -o myApp
    go build -gcflags="all=-N -l" -o myApp.exe
  2. 运行已编译的可执行文件。

    ./myApp
    .\myApp.exe

步骤 3。 附加到正在运行的进程并进行调试

  1. 点击代码行旁的边距以设置断点。 在 提供的示例中,将断点放置在第 23 行(message := fmt.Sprintf("Hello %s!", r.UserAgent()))。 在 断点 中了解更多关于断点的信息。

  2. 点击 运行 | 附加到进程 或使用快捷键 Ctrl+Alt+F5。

  3. 在 使用调试器附加到 窗口中,选择您的应用程序进程并按 Enter。

  4. 触发应用程序中与断点相关的事件。 如果使用提供的代码示例,请在浏览器中打开 http://localhost:8080/ 链接。

附加到远程计算机上的进程

可以连接到远程计算机上的 Delve,以调试在那里运行的 Go 进程。 以下示例使用一台 Linux 远程计算机和一个 SSH 隧道。

要安装 Delve,您可以使用以下命令:

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

步骤 1。 在远程计算机上构建应用程序

  • 在远程计算机上的终端中,打开应用程序目录并运行:

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

    此命令编译 myApp 可执行文件,并禁用编译器优化和内联。

步骤 2。 在远程计算机上运行 Delve

  • 您有两种选项可以在主机上启动调试器:

    • 使用 Delve 启动应用程序。 myApp 是在 步骤 1 中构建的可执行文件。

      dlv --listen=127.0.0.1:2345 --headless=true --api-version=2 exec ./myApp

      如果需要按原样传递参数给二进制文件,请在前一个命令中添加双破折号符号(-- ),然后添加必要的选项(例如, -- --config=/path/to/config/file)。

    • 您运行进程,调试器附加到正在运行的进程。 <PID> 是远程计算机上应用程序的进程标识符。 在该计算机上使用 ps 等工具来查找它。

      dlv --listen=127.0.0.1:2345 --headless=true --api-version=2 attach <PID>

转发调试器端口

  1. 在本地计算机上的终端中,启动 SSH 隧道:

    ssh -N -L 2345:127.0.0.1:2345 user@remote-host

    将 用户 和 remote-host 替换为 SSH 用户名和远程计算机的地址。 调试时保持 SSH 连接打开。

  2. 按如下所述将 GoLand 连接到 127.0.0.1:2345。 隧道会将此连接转发到远程计算机上的 Delve。

步骤 3。 在本地计算机上启动调试过程

  1. 打开您的应用程序代码并设置断点。 在 提供的代码示例中,在第 23 行设置断点(message := fmt.Sprintf("Hello %s!", r.UserAgent()))。 在 断点 中了解更多关于断点的信息。

  2. 点击 运行 | 编辑配置。 或者,点击工具栏上的运行/调试配置列表并选择 编辑配置。

  3. 在 运行/调试配置 对话框中,点击 添加 按钮(添加按钮 ),然后选择 远程编程。

  4. 在 主机 字段中,输入 127.0.0.1 以使用 SSH 隧道。

  5. 在 端口 字段中,输入您在 步骤 2中配置的调试器端口(例如, 2345)。

  6. 点击 调试。

  7. 触发应用程序中断点处的事件。 如果您使用了 提供的代码示例 ,请在浏览器中打开 http://<host_address>:8080/。

    下面的视频展示了调试器工作流,但早于 SSH 隧道设置。 使用上述步骤中的侦听器地址和隧道。 在视频中,深色主题的 IDE 位于本地计算机上,浅色主题的 IDE 位于远程计算机上。

附加到 Docker 容器中的进程

您可以将调试器附加到在 Docker 容器中运行的 Go 进程。 有关 Docker 的更多信息,请参阅 Docker。

以下步骤在本地计算机上使用 Docker。 将调试器端口发布到 127.0.0.1 ,以便其他计算机无法连接到它。

出于示例目的,您可以为 此 Go 应用程序使用 以下 Dockerfile。

步骤 1。 创建 Dockerfile 配置

  1. 点击 运行 | 编辑配置。 或者,点击工具栏上的运行/调试配置列表并选择 编辑配置。

  2. 在 运行/调试配置 对话框中,点击 添加 按钮(添加按钮 ),然后选择 Docker | Dockerfile。

  3. 在 Dockerfile 字段中,点击 浏览 图标(浏览图标 ),并在文件浏览器中导航到 Dockerfile 。 如果您使用本节中的示例,请导航到 此 Dockerfile。

  4. 在 容器名称 字段中,输入容器名称(例如 debugging-tutorial)。

  5. 在 运行/调试配置 对话框中,点击 修改 并选择 绑定端口 和 运行选项。

    绑定端口
  6. 在 绑定端口 字段中,点击 浏览 (浏览图标)。

  7. 在 端口绑定 对话框中,点击 添加 按钮(添加按钮)。 在 主机端口 列中,输入 8080。 点击 容器端口 列,输入 8080。 另外,为端口 40000 创建相同的绑定。 将每个绑定的 主机 IP 设置为 127.0.0.1。

  8. 在 运行选项 字段中,指定 Docker 的命令行选项。 对于 Dockerfile 中提供的示例,禁用 安全配置文件 ,并添加 SYS_PTRACE Linux 功能。

    --security-opt="apparmor=unconfined" --cap-add=SYS_PTRACE
  9. 点击 运行。

步骤 2。 创建 Go Remote 运行/调试配置

  1. 点击 运行 | 编辑配置。 或者,点击工具栏上的运行/调试配置列表并选择 编辑配置。

  2. 在 运行/调试配置 对话框中,点击 添加 按钮(添加按钮 ),然后选择 远程编程。

  3. 在 主机 字段中,输入主机 IP 地址(例如, localhost)。

  4. 在 端口 字段中,输入您配置的调试器端口。 在此示例中,它是 40000。

  5. 点击 确定。

    为 Docker 调试创建 Go Remote 运行/调试配置

步骤 3。 启动调试过程

  1. 在 服务 工具窗口(查看 | 工具窗口 | 服务 )中,展开 Docker | 容器。 确保创建的容器正在运行并监听预配置的调试器端口。

  2. 点击代码行附近的边距以放置断点。 例如,在 提供的代码示例中,将断点放置在第 23 行(message := fmt.Sprintf("Hello %s!", r.UserAgent()))。

    在 断点 中阅读有关断点的更多信息。

  3. 从工具栏上的运行/调试配置列表中,选择 创建的 Go Remote 配置 ,并点击 调试 <configuration_name> 按钮(调试按钮)。 或者,按 Alt+Shift+F9 选择创建的 Go Remote 配置。

  4. 触发应用程序中断点处的事件。 如果您使用了 提供的代码示例 ,请在浏览器中打开 http://localhost:8080/。

    以下视频演示了如何运行容器并连接调试器。 它早于上述步骤中的环回端口绑定。 使用这些绑定来保持调试器端口为私有。

提高效率的提示

断开与远程调试器的连接

远程编程 中的 断开连接时 设置决定 GoLand 如何断开连接:

  • 停止远程 Delve 进程 :停止 Delve,而不询问是否保持其运行。

  • 保持运行 :保持 Delve 运行。 如果应用程序仍在运行,GoLand 会在关闭连接之前清除其断点并恢复执行。

  • 询问 (默认):如果 Delve 是使用 --accept-multiclient 启动的, 停止远程 Delve 对话框会询问是否停止它。 否则,GoLand 会停止 Delve,而不显示此对话框。

  1. 按 Ctrl+F2 结束调试会话。

  2. 如果 停止远程 Delve 对话框打开,请选择是否停止 Delve。 要在运行配置中保存选择,请选中会禁用未来提示的复选框。

  3. 如果在 Delve 附加到仍在运行的现有远程进程时停止 Delve, 终止远程进程 对话框会询问是否终止该进程。 选择是停止应用程序还是让其继续运行。

要重新连接到同一 Delve 服务器,请使用 --accept-multiclient 启动它。 断开连接之前,请在运行配置中将 断开连接时 设置为 保持运行 ,或在出现提示时拒绝停止 Delve。

2026年 11月 9日