-
Notifications
You must be signed in to change notification settings - Fork 3.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
build: add remote debugging with delve #10587
Merged
+153
−24
Merged
Changes from all commits
Commits
Show all changes
8 commits
Select commit
Hold shift + click to select a range
4620339
add: simd-dlv dockerfile for delve remote debugging
9M6 ffe3759
update: Makefile to allow for two sets of testnets, one without delve…
9M6 d03729d
update: docker-compose to add a port for remote delve debugging 2345-…
9M6 58d6842
Merge branch 'master' into build/add-remote-debugging
9M6 b9d171b
Merge branch 'master' into build/add-remote-debugging
9M6 e4605da
add: documentation for localnet-debug
9M6 64ca717
update: improve comments in makefile for localnet-{start,debug}
9M6 c846c08
Merge branch 'master' into build/add-remote-debugging
9M6 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,14 @@ | ||
all: simd-env | ||
|
||
simd-env: | ||
docker build --tag cosmossdk/simd-env -f simd-env/Dockerfile \ | ||
$(shell git rev-parse --show-toplevel) | ||
simd-env: simd-rmi | ||
docker build --tag cosmossdk/simd -f simd-env/Dockerfile \ | ||
$(shell git rev-parse --show-toplevel) | ||
|
||
.PHONY: all simd-env | ||
simd-dlv: simd-rmi | ||
docker build --tag cosmossdk/simd -f simd-dlv/Dockerfile \ | ||
$(shell git rev-parse --show-toplevel) | ||
|
||
simd-rmi: | ||
docker rmi cosmossdk/simd 2>/dev/null; true | ||
|
||
.PHONY: all simd-env simd-dlv simd-rmi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
FROM golang:1.17-alpine AS build | ||
RUN apk add build-base git linux-headers libc-dev | ||
RUN go install github.com/go-delve/delve/cmd/dlv@latest | ||
WORKDIR /work | ||
COPY go.mod go.sum /work/ | ||
COPY db/go.mod db/go.sum /work/db/ | ||
RUN go mod download | ||
COPY ./ /work | ||
RUN LEDGER_ENABLED=false make COSMOS_BUILD_OPTIONS="debug,nostrip" clean build | ||
|
||
FROM alpine:3.14 AS run | ||
RUN apk add bash curl jq | ||
COPY contrib/images/simd-dlv/wrapper.sh /usr/bin/wrapper.sh | ||
|
||
VOLUME /simd | ||
COPY --from=build /work/build/simd /simd/ | ||
COPY --from=build /go/bin/dlv /usr/local/bin | ||
WORKDIR /simd | ||
|
||
EXPOSE 26656 26657 2345 | ||
ENTRYPOINT ["/usr/bin/wrapper.sh"] | ||
CMD ["start", "--log_format", "plain"] | ||
STOPSIGNAL SIGTERM |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
# Remote Debugging with go-delve | ||
|
||
[Delve](https://github.com/go-delve/delve) is a debugger for the Go programming language. The goal of the project is to provide a simple, full featured debugging tool for Go. Delve should be easy to invoke and easy to use. Chances are if you're using a debugger, things aren't going your way. With that in mind, Delve should stay out of your way as much as possible. | ||
|
||
## Use-case | ||
|
||
Cosmos-SDK provides you with a local network to bootstrap a chain in your machine, but how does one debug a node or module? | ||
|
||
If we start a single node, we won't be able to debug transactions as the machine will be in bootstrapping phase trying to find peers to connect too, thats why we need to start a local network. | ||
|
||
But the current `localnet-start` does not provide us with debugging tools so that's why there is a different image for debugging a local network, that is to avoid any issues in the future were debugging won't be needed. | ||
|
||
Both `simd-env` and `simd-dlv` work and run the same, except that `simd-dlv` uses `go-delve` to run the binaries. | ||
|
||
## How to use | ||
|
||
The command to start a local network in debug mode is: | ||
```shell | ||
# make localnet-debug | ||
``` | ||
|
||
The command to stop the local network and destroy its containers is: | ||
```shell | ||
# make localnet-stop | ||
``` | ||
__note: this works the same for both `localnet-start` and `localnet-debug`__ | ||
|
||
Now, by default only `simdnode0` is run in debug mode, but you can run any of the other nodes in debug mode by changing the `DEBUG` environment variable to `1` in `docker-compose.yml`. | ||
|
||
## How to connect | ||
|
||
Delve will open a port on `2345` for `simdnode0` and it will increment for each of the other nodes that have `DEBUG` set to `1`. | ||
|
||
You can connect to the debugging server either through [GoLand IDE](https://www.jetbrains.com/help/go/attach-to-running-go-processes-with-debugger.html) or you can use [delve cli](https://github.com/go-delve/delve/blob/master/Documentation/usage/dlv_connect.md) command. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
#!/usr/bin/env sh | ||
set -euo pipefail | ||
set -x | ||
|
||
DEBUG=${DEBUG:-0} | ||
BINARY=/simd/${BINARY:-simd} | ||
ID=${ID:-0} | ||
LOG=${LOG:-simd.log} | ||
|
||
if ! [ -f "${BINARY}" ]; then | ||
echo "The binary $(basename "${BINARY}") cannot be found. Please add the binary to the shared folder. Please use the BINARY environment variable if the name of the binary is not 'simd'" | ||
exit 1 | ||
fi | ||
|
||
export SIMDHOME="/data/node${ID}/simd" | ||
|
||
if [ "$DEBUG" -eq 1 ]; then | ||
dlv --listen=:2345 --continue --headless=true --api-version=2 --accept-multiclient exec "${BINARY}" -- --home "${SIMDHOME}" "$@" | ||
elif [ "$DEBUG" -eq 1 ] && [ -d "$(dirname "${SIMDHOME}"/"${LOG}")" ]; then | ||
dlv --listen=:2345 --continue --headless=true --api-version=2 --accept-multiclient exec "${BINARY}" -- --home "${SIMDHOME}" "$@" | tee "${SIMDHOME}/${LOG}" | ||
elif [ -d "$(dirname "${SIMDHOME}"/"${LOG}")" ]; then | ||
"${BINARY}" --home "${SIMDHOME}" "$@" | tee "${SIMDHOME}/${LOG}" | ||
else | ||
"${BINARY}" --home "${SIMDHOME}" "$@" | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would love to have Makefile comments for what's the difference between those 2. Or these comments can go near
localnet-start
andlocalnet-debug