Go-Ethereum
如何用 delve 調試 geth?
當我按如下方式執行 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 應該也能正常工作