🔖

delevでデバッグできるようにしてみる

2023/04/10に公開

背景

こちらの続き。
デバッガを入れられると開発効率が上がるでの、delveを入れてみる。

環境

Windows11
vscode
docker desktop 4.17.1

実際に入れてみる

今までのコードをちょっと修正すればいけるはず。

Go Toolsのインストール、アップデート

デバック設定を作成

vscodeの「実行とデバック」から「launch.jsonファイルを作成します。」をクリック
「Docker:Drbug in Container」をクリック
launch.jsonを以下に編集

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Remote",
      "type": "go",
      "request": "attach",
      "mode": "remote",
      "remotePath": "/go/src/app",
      "port": 2345,
      "host": "localhost"
    }
  ]
}

.air.tomlを編集

cmdとfull_binを以下に編集

cmd = 'go build -gcflags "all=-N -l" -o ./tmp/main'
full_bin = "dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient exec --continue tmp/main"

Dockerfileを編集

dlvをインストールするように追記

FROM golang:1.19-alpine as dev

ENV ROOT=/go/src/app
ENV CGO_ENABLED 0
WORKDIR ${ROOT}

RUN apk update && apk add git
RUN go install github.com/go-delve/delve/cmd/dlv@latest -> ここ
RUN go install github.com/cosmtrek/air@latest
RUN apk add curl
CMD ["air", "-c", ".air.toml"]

docker-compose.ymlを編集

2345ポートを開けるように追記

version: '3.8'
services:
  app:
    build:
      context: .
      target: dev
      dockerfile: Dockerfile
    env_file: .env
    tty: true
    container_name: echo-practice
    volumes:
      - ./:/go/src/app
    ports:
      - 1323:1323
      - 2345:2345 -> ここ
  mock:
    image: node:19-alpine3.16
    tty: true
    container_name: animal-api
    working_dir: /tmp
    #restart: always
    command: >
      sh -c '
        npm install -g @stoplight/prism-cli
        prism mock -h 0.0.0.0 "/tmp/openapi.yml"
      '
    volumes:
      - data-mock:/var/lib/mock/data
      - ./mock:/tmp
    ports:
      - 4010:4010
volumes:
  data-mock:

動作確認

コンテナ起動

docker-compose up -d

ブレークポイント設定

起動

API実行するとブレークポイントで止まった

Discussion