安裝
Golang debug 推薦使用 Delve 工具,項目地址:https://github.com/derekparker/delve
一、安裝
照着 github 上 delve 項目的安裝說明操作,go mod
模式下推薦使用第二種方式。
1.拉取最新 delve 項目代碼到本地,編譯安裝。
# cd $GOPATH/src/
# git clone https://github.com/derekparker/delve.git
# cd delve/cmd/dlv/
# go build
# go install
國內環境go build
會報錯:
go: golang.org/x/crypto@v0.0.0-20180614174826-fd5f17ee7299: unrecognized import path "golang.org/x/crypto" (https fetch: Get https://golang.org/x/crypto?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
go: golang.org/x/sys@v0.0.0-20180614134839-8883426083c0: unrecognized import path "golang.org/x/sys" (https fetch: Get https://golang.org/x/sys?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
go: golang.org/x/arch@v0.0.0-20171004143515-077ac972c2e4: unrecognized import path "golang.org/x/arch" (https fetch: Get https://golang.org/x/arch?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
原因是 Golang 官網被牆了,這里手動修改go.mod
文件,把項目地址替換為 github 上的地址,如:
# vim ../../go.mod # 添加下面替換: replace ( golang.org/x/arch v0.0.0-20171004143515-077ac972c2e4 => github.com/golang/arch v0.0.0-20171004143515-077ac972c2e4 golang.org/x/crypto v0.0.0-20180614174826-fd5f17ee7299 => github.com/golang/crypto v0.0.0-20180614174826-fd5f17ee7299 golang.org/x/sys v0.0.0-20180614134839-8883426083c0 => github.com/golang/sys v0.0.0-20180614134839-8883426083c0 )
https://studygolang.com/articles/17204?fr=sidebar
========================================================================
遠程調試
因為不知道delvel 是如何設置源碼的,本地編譯的上傳到服務器上,服務器要調試看不到源碼,很是憂傷,所以干脆使用遠程調試吧:
在服務器上 ps x|grep game 查找到gameserver的進程pid
然后服務器命令行輸入:
dlv attach $PID --headless --api-version=2 --log --listen=:8181
示例:
➜ test git:(master) ✗ ~/gopath/bin/dlv attach 24393 --headless --api-version=2 --log --listen=:8181
API server listening at: [::]:8181
2020-03-27T17:42:59+08:00 info layer=debugger attaching to pid 24393
Could not attach to pid 24393: this could be caused by a kernel security setting, try writing "0" to /proc/sys/kernel/yama/ptrace_scope
出現這種問題的話,使用sudo➜ test git:(master) ✗ sudo ~/gopath/bin/dlv attach 24521 --headless --api-version=2 --log --listen=:8181
API server listening at: [::]:8181
2020-03-27T17:45:44+08:00 info layer=debugger attaching to pid 24521
本機只要輸入:
dlv connect www.example.com:8181
連接到服務器上的dlv進程,就可以在本機遠程調試了。
需要注意的是
本機quit 以后,遠程dlv進程也會結束。
本機沒有dlv connect,遠程dlv直接關閉會導致 遠程調試進程PID直接退出(很是憂傷)
本機dlv輸入quit以后,會讓你選擇是否關閉調試進程,這個有時候也方便,不過大多數都是選擇N 不關閉調試進程PID
https://www.cnblogs.com/ayanmw/p/8995178.html