Golang 远程调试工具
一、背景
当我们需要在本地电脑调试服务器上的Go应用程序的时候,就需要使用远程调试工具了。
比如,本地无法访问某些地址,只有服务器上的某台机器才可以访问。同时我们又想进行调试,查看代码执行过程。在本地,我们开启调试时,无法访问某些地址,导致无法正常调试。所以我们使用远程调试工具,将可执行文件放在服务器上。使用调试工具运行可执行文件,并开启调试端口。本地就可以访问端口,进行调试远程的代码了。
二、环境与步骤
1、可执行文件
可执行文件需要被编译成服务器可执行的二进制文件。比如Windows和Linux分别使用不同的命令进行交叉编译:
# 编译成 linux 的二进制文件
CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build -o /path/app
# 编译成 windows 的二进制文件
CGO_ENABLED=0 GOARCH=amd64 GOOS=windows go build -o /path/app.exe
但,如果需要被远程调试,则需要加上这些参数:
# 编译成 windows 的二进制文件,并且禁用优化,禁用内联,以方便调试。
CGO_ENABLED=0 GOARCH=amd64 GOOS=windows go build -gcflags "all=-N -l" -o /path/app.exe
2、服务器环境
虽然放在服务器上的是可执行的二进制文件,但因为要调试,所以也需要go语言的解释器。所以服务器上需要配置:go语言环境、安装delve调试工具。(注:需要将这两个工具配置进环境变量里)
步骤:
1、下载 go 安装包,安装即可。linux可直接使用依赖库下载安装。
2、安装delve调试工具:https://github.com/go-delve/delve
# 在 go 1.16 及以上版本可直接执行下面命令即可
go install github.com/go-delve/delve/cmd/dlv@latest
3、本地环境
本地直接使用Goland即可。
步骤:
1> 打开goland,载入代码(代码要和服务器上的可执行文件对应),点击顶部菜单的“运行”,点击调试:
2> 点击编辑配置:
3> 点击左上角的 +
4> 选择 远程配置:Go Remote
5> 填入相关配置:
名称:自定义名称,用以区分不同的调试配置
主机:部署可执行文件的服务器IP
端口:保持不变,如果变动的话,后续再服务器上启动时开启的端口也要保持一致。
后续服务器上的启动命令,如下图:
# 服务器启动命令
dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient exec ./demo
# 如果可执行文件需要传入启动参数则使用 --
dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient exec ./demo -- -c ./config.toml
6> 点击应用,点击调试,这时候会出现,正在连接,服务器Ip:端口
7> 在服务器启动调试工具:
8> 本地环境显示开始调试:
Over
推荐两本书《大话数据结构》和《GO语言程序设计》
《大话数据结构》:此书适合自学的程序员,它用一个故事、趣味的题目、一部电影的介绍等形式来作为每一个知识点的形象类比,通俗易懂。
电子版领取:
扫码关注公众号:通向财富自由之路,回复“大话数据结构”即可领取电子版
回复 ”GO语言程序设计“ 也可获得 《GO语言程序设计》电子版。