Go Remote 远程调试docker容器内的go程序

1、基础环境配置信息

  • centos7.9:包含go程序源码和docker容器, 并将源码映射到容器内部
  • window11系统:安装goland

2、安装和配置DLV调试器

首先,因为是调试容器内的go程序, 所以在docker容器内部安装dlv, 直接进入容器中执行命令

go get github.com/go-delve/delve/cmd/dlv

3、在Docker容器内使用DLV编译应用程序

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

这条命令是用来启动一个用于远程调试的 Delve 调试服务器。下面是每个参数的详细解释:

  • debug:这是 Delve 的一个命令,用于启动并调试 Go 程序。如果没有指定程序名,Delve 会尝试在当前目录下寻找 main 包。

  • --headless:这个参数告诉 Delve 以无头模式运行,也就是说,Delve 将不会启动交互式的命令行界面,而是等待远程连接。

  • --listen=:2345:这个参数指定了 Delve 服务器监听的地址和端口。在这个例子中,Delve 将在所有网络接口的 2345 端口上监听连接。

  • --api-version=2:这个参数指定了 Delve 的 API 版本。目前 Delve 有两个版本的 API,分别是 v1 和 v2。v2 版本的 API 提供了更多的功能。

  • --accept-multiclient:这个参数允许多个客户端同时连接到 Delve 服务器。这对于同时从多个 IDE 或编辑器进行调试非常有用。

总的来说,这条命令启动了一个 Delve 调试服务器,该服务器在所有网络接口的 2345 端口上监听连接,支持多个客户端同时连接,并使用 v2 版本的 API。

在程序入口执行上面的命令,会生成一个__debug_bin1458395116*文件

root@localhost:/src/ligato/vpp-agent/cmd/vpp-agent# dlv debug --headless --listen=:2345 --api-version=2 --accept-multiclient

root@localhost:/src/ligato/vpp-agent/cmd/vpp-agent# ll
total 327308
drwxr-xr-x 3 root root       174 Mar  4 10:32 ./
drwxr-xr-x 5 root root        75 Mar  3 22:31 ../
-rwxr-xr-x 1 root root 111711208 Feb 29 10:46 __debug_bin1458395116*
-rwxr-xr-x 1 root root 111711080 Mar  3 22:41 __debug_bin2278558726*
-rwxr-xr-x 1 root root 111711080 Mar  3 21:48 __debug_bin473168677*
drwxr-xr-x 2 root root        26 Feb 20 10:15 app/
-rw-r--r-- 1 root root       554 Mar  4 10:33 cert.pem
-rw------- 1 root root       241 Mar  4 10:33 key.pem
-rw-r--r-- 1 root root      4807 Feb 20 10:15 main.go
-rw-r--r-- 1 root root        94 Feb 20 10:15 vpp_agent_test.go

4、在容器内部启动dlv编译好的debug程序

dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient exec ./__debug_bin2278558726  -- -config-dir=/opt/vpp-agent/dev

命令解释:
这条命令是用来启动一个用于远程调试的 Delve 调试服务器。以下是每个参数的详细解释:

  • --listen=:2345:这个参数指定了 Delve 服务器监听的地址和端口。在这个例子中,Delve 将在所有网络接口的 2345 端口上监听连接。

  • --headless=true:这个参数告诉 Delve 以无头模式运行,也就是说,Delve 将不会启动交互式的命令行界面,而是等待远程连接。

  • --api-version=2:这个参数指定了 Delve 的 API 版本。目前 Delve 有两个版本的 API,分别是 v1 和 v2。v2 版本的 API 提供了更多的功能。

  • --accept-multiclient:这个参数允许多个客户端同时连接到 Delve 服务器。这对于同时从多个 IDE 或编辑器进行调试非常有用。

  • exec ./__debug_bin2278558726:这个命令告诉 Delve 执行名为 __debug_bin2278558726 的二进制文件。这个二进制文件通常是你的 Go 程序的可执行文件。

  • -- -config-dir=/opt/vpp-agent/dev:这个参数是传递给你的 Go 程序的。在这个例子中,它指定了配置目录的路径为 /opt/vpp-agent/dev

总的来说,这条命令启动了一个 Delve 调试服务器,该服务器在所有网络接口的 2345 端口上监听连接,支持多个客户端同时连接,并使用 v2 版本的 API。它将执行名为 __debug_bin2278558726 的二进制文件,并将配置目录的路径设置为 /opt/vpp-agent/dev

5、goland配置

情况说明我的goland安装在windows11系统, 代码在虚拟机centos系统,使用golandssh远程到虚拟机,使用Goland的Remote development功能:file->Remote development
![[Pasted image 20240304113253.png]]在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6、go remote配置

在这里插入图片描述
在这里插入图片描述

  • Name:这个配置的name 随便起
  • Host:程序所在主机的ip
  • Port:dlv编译启动时候开放得端口
  • On disconnect:goland关闭go remote的时候,是否停止容器内的dlv程序
  • 23
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
回答: 要在VSCode中进行远程调试docker容器,可以按照以下步骤进行操作。首先,确保你已经安装了VSCode和Docker,并且已经在远程服务器上启动了docker daemon。然后,使用VSCode的remote-ssh插件连接到远程服务器。在远程服务器的命令行中启动docker,并在docker容器中配置ssh连接。你可以修改ssh的config文件,允许root用户远程登录,并设置root用户的密码。接下来,在VSCode中使用remote-ssh插件连接到docker容器进行远程调试。你可以在VSCode的配置文件中添加相关的主机配置,包括主机名、用户名、端口等信息。然后,你就可以在VSCode中进行远程调试docker容器内的代码了。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [VSCode连接远程docker容器进行代码调试](https://blog.csdn.net/TracelessLe/article/details/119060513)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [vscode连接docker远程调试](https://blog.csdn.net/DCGJ666/article/details/108536065)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值