使用goland調試遠程代碼
簡介
實際工作中難免遇到需要調試服務器上代碼的情況,最近項目就遇到了代碼在服務上報出tcp握手失敗的異常,而本地卻正常的情況,日志不好加,這里研究了一下golang的遠程調試方法,并做記錄。
測試基于goland和dlv實現go代碼的遠程調試。遠程服務器采用centos7.9
go環境安裝
安裝配置
下載golang linux安裝包,并解壓到/root/apps/go 目錄,配置環境變量
vi /etc/profile
export GOROOT=/root/apps/go
export GOPATH=/root/apps/go/gopath
export PATH=$PATH:/$GOROOT/bin:$GOPATH/bin
驗證
執行 如下命令查看go的版本,能看到證明安裝成功
[root@localhost go]# go version
go version go1.17.5 linux/amd64
dvl 工具安裝
下載工具dlv
[root@localhost gopath]# go env -w GOPROXY=https://goproxy.cn --配置golang代理
[root@localhost gopath]# cd $GOPATH -- 到 gopath目錄下
[root@localhost gopath]# go install github.com/go-delve/delve/cmd/dlv@latest --安裝dlv
[root@localhost gopath]# ln -s $GOPATH/bin/dlv /usr/local/bin/dlv --配置軟連接
[root@localhost gopath]# dlv version
Delve Debugger
Version: 1.8.0
Build: $Id: 6a6c9c332d5354ddf1f8a2da3cc477bd18d2be53 $
dvl 工具啟動
方式一 遠端有項目源碼時,保證遠端和本地的項目代碼一致即可項目文件夾根目錄下使用如下命令
dlv debug --headless --listen=:2345 --api-version=2 --accept-multiclient
方式二 遠端只有編譯后的程序
??1.使用dlv運行程序:
dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient exec ./test001_linux
??帶命令行參數,在可執行程序后面帶上 --,再后面就是命令行參數:
dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient exec ./test001_linux -- -s 123
??2.先運行程序記住進程id,再運行dlv,具體如下
[root@localhost gopath]# nohup ./gotest &
[2] 335
[root@localhost gopath]# nohup: 忽略輸入并把輸出追加到"nohup.out"
--注意 335 是 上述啟動 go進程的id 2345 是服務監聽的端口 這里寫哪個端口 goland中就要配置哪個端口,其他參數可以通過 執行 dlv 查看幫助信息
[root@localhost gopath]# dlv attach 335 --headless --listen=:2345 --api-version=2 --accept-multiclient
API server listening at: [::]:2345
2021-12-26T13:06:55+08:00 warning layer=rpc Listening for remote connections (connections are not authenticated nor encrypted)
GoLand配置及啟動
新建一個Go remote配置

然后在主機處輸入服務器的ip地址,端口號使用默認的2345就行


浙公網安備 33010602011771號