Go Remote 远程调试docker容器内的go程序
后台-插件-广告管理-内容页头部广告(手机) |
Go Remote 远程调试docker容器内的go程序
- 1、基础环境配置信息
- 2、安装和配置DLV调试器
- 3、在Docker容器内使用DLV编译应用程序
- 4、在容器内部启动dlv编译好的debug程序
- 5、goland配置
- 6、go remote配置
1、基础环境配置信息
- centos7.9:包含go程序源码和docker容器, 并将源码映射到容器内部
- window11系统:安装goland
2、安装和配置DLV调试器
首先,因为是调试容器内的go程序, 所以在docker容器内部安装dlv, 直接进入容器中执行命令
go get github.com/go-delve/delve/cmd/dlv- 1
3、在Docker容器内使用DLV编译应用程序
dlv debug --headless --listen=:2345 --api-version=2 --accept-multiclient- 1
这条命令是用来启动一个用于远程调试的 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- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
4、在容器内部启动dlv编译好的debug程序
dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient exec ./__debug_bin2278558726 -- -config-dir=/opt/vpp-agent/dev- 1
命令解释:
这条命令是用来启动一个用于远程调试的 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程序
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。
在线投稿:投稿 站长QQ:1888636
后台-插件-广告管理-内容页尾部广告(手机) |