Go-Ethereum

如何用 delve 調試 geth?

  • March 7, 2022

當我按如下方式執行 delve 時,它會出現有關內部包的錯誤。如何克服它?

$ dlv debug cmd/geth/main.go
cmd/geth/main.go:35:2: use of internal package not allowed
exit status 1

對於那些遇到同樣問題的人。

Delve-gcflags=all='-N -l'在建構 cmd 中需要額外的參數,您可以手動建構它而不是執行make geth

go build -o ./build/bin/geth   -gcflags=all='-N -l' -v ./cmd/geth 

然後你可以執行

dlv  --headless --listen=:2345 --api-version=2 exec ./build/bin/geth -- ${yourGethParams}

自從 go-ethereum 遷移到 go.mod,我已經能夠做到這一點

cd go-ethereum
dlv debug --headless --listen=:2345 --log --api-version=2 github.com/ethereum/go-ethereum/cmd/geth -- $GETH_OPTS

我確實設置了以下 CGO 環境變數。(雖然這可能不是必需的)

CGO_LDFLAGS=-L/usr/local/opt/openssl/lib
CGO_CPPFLAGS=-I/usr/local/opt/openssl/include

我碰巧使用 headless & listen 以及附加以適應 docker compose 工作流程。exec 應該也能正常工作

引用自:https://ethereum.stackexchange.com/questions/41489