GoLand 2025.2 Help

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

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

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

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

为了便于示例,您可以使用 github.com 上的以下 Go 代码

第 1 步。安装 gops 包 安装 gops 包

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

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

    安装 gops 包

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

  1. 通过导航至 视图 | 工具窗口 | 终端 打开 终端 工具窗口,并执行以下命令:

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

    该命令会编译 myApp.exe 可执行文件,并禁用编译器优化和函数内联。

  2. 运行已编译的可执行文件。

    .\myApp.exe
    使用 gcflags 标志构建应用程序

第 3 步。附加并调试运行中的进程 附加并调试运行中的进程

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

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

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

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

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

您可以连接到远程计算机,并将调试器附加到其上运行的 Go 进程。 远程调试器(Delve)必须在远程计算机上运行。

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

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

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

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

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

    该命令会编译 myApp.exe 可执行文件,并禁用编译器优化和函数内联。

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

  • 您可以选择以下两种方式之一在主机上启动调试器:

    • 调试器为您运行该进程。 如果您使用防火墙,请开放配置中使用的端口(例如, 2345)。 您可以使用任意未被占用的端口号。 myApp 是在 步骤 1中构建的可执行文件的名称。

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

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

    • 您运行进程,调试器附加到正在运行的进程。 <PID> 是您的应用程序的进程标识符。 您可以使用 附加到进程命令 获取进程标识符。

      dlv --listen=:2345 --headless=true --api-version=2 attach <PID>
    在主机上运行 Delve

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

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

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

  3. 运行/调试配置 对话框中,单击 添加 按钮(添加按钮 ),然后选择 Go Remote

  4. 主机 字段中输入主机 IP 地址(例如, localhost192.168.1.33)。

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

  6. 单击 调试

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

    在以下视频中,包含两个 IDE 实例:使用深色主题的 IDE 是本地计算机,使用浅色主题的 IDE 是远程计算机。

附加到 Docker 容器中的进程

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

作为示例,您可以为 此 Go 应用程序使用 以下 Dockerfile

第 1 步。创建 Dockerfile 配置 创建 Dockerfile 配置

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

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

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

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

  5. 运行/调试配置 对话框中,单击 修改 ,然后选择 绑定端口 以及 运行选项

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

  7. 端口绑定 对话框中,单击 添加 按钮(添加按钮)。 在 主机端口 列中,输入 8080。 单击 容器端口 列,输入 8080。 另外,请为端口 40000 创建相同的绑定。

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

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

    创建 Dockerfile 配置

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

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

  2. 运行/调试配置 对话框中,单击 添加 按钮(添加按钮 ),然后选择 Go Remote

  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/

    以下视频演示了如何运行容器、创建远程运行/调试配置并连接容器进行调试。

效率提示

终止远程进程

  • 在远程调试会话期间,您可以按 Ctrl+F2 结束远程进程。 请注意,终止该进程后,无法重新附加到该进程。

最后修改日期: 2025年 9月 26日