「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > VS Code で Golang をデバッグするための Delve と Air のセットアップ

VS Code で Golang をデバッグするための Delve と Air のセットアップ

2024 年 8 月 19 日に公開
ブラウズ:298

Setting up Delve and Air to debug Golang with VS Code

VS コード拡張

VS Code Extensions で Go を検索し、インストールします。

  • https://marketplace.visualstudio.com/items?itemName=golang.Go

デバッガ

VS Code でデバッグ (ブレークポイント、ステップスルーなど) を行うには、Delve をインストールする必要があります。

go install github.com/go-delve/delve/cmd/dlv@latest

asdf を使用して Go をインストールした場合、delve は次の場所にあります:

~/.asdf/shims/dlv

go パッケージをインストールした後に asdf reshim を実行するとよいでしょう。

ライブリロード

GoLang はコンパイル言語であるため、コードは 1 つの実行可能ファイルにコンパイルされます。開発中、変更を加えるには常に再コンパイルする必要があり、特に VS Code では手動プロセスになる可能性があります。

https://github.com/air-verse/air を使用してライブ リロードを行います。

これは、変更を監視するためにプロジェクト フォルダー内で 1 回実行するだけで済むコマンド ライン ツールです。

インストール

パッケージをインストールします。 v1.22 以降を使用していると仮定します。

go install github.com/air-verse/air@latest

asdf を使用して Go をインストールした場合、air は次の場所にあります:

~/.asdf/shims/air

プロジェクト ルートで air.toml 構成ファイルを初期化します

cd ~/myproject
air init

air.toml [[go build]] コマンドを次のように編集します:
- all: フラグはビルド パッケージ内のすべてのパッケージに適用される必要があります
- -N: 最適化を無効にして、生成されたコードをソース コードに近づけてデバッグを容易にします
- -l: 関数呼び出しのオーバーヘッドを削減するために小さな関数が適切に展開されるインライン最適化を無効にし、デバッグを容易にします
- Delve リファレンスからの推論

- cmd = "go build -o ./tmp/main ."
  cmd = 'CGO_ENABLED=0 go build -gcflags=all="-N -l"-o ./tmp/main .'"'

[!情報]
次の場合、air はデフォルト設定で実行されます:

  • air.toml ファイルが無効です
  • コマンド air
  • を実行して、プロジェクト フォルダーで実行します。

air.toml ファイルは使用されません。

air.toml full_bin を編集して、[[Delve]] でビルドされたバイナリを実行します。

- full_bin = ""
  full_bin = "dlv exec ./tmp/main --listen=127.0.0.1:2345 --headless=true --api-version=2 --accept-multiclient --continue --log --"

これにより、ポート 2345 で Delve が実行されます。

プロジェクトフォルダーでairを実行します。次の出力が表示されるはずです。

> cd ~/my-project
> air
  __    _   ___  
 / /\  | | | |_) 
/_/--\ |_| |_| \_ v1.52.3, built with Go go1.22.5

mkdir ~/my-project/tmp
watching .
!exclude tmp
building...
running...
API server listening at: 127.0.0.1:2345
2024-07-28T18:47:07 07:00 info layer=debugger launching process with args: [./tmp/main]
2024-07-28T18:47:09 07:00 debug layer=debugger entryPoint 0x1006e8000 machoOff 0x100000000
2024-07-28T18:47:09 07:00 warning layer=debugger debug_frame workaround not applied: function internal/abi.(*RegArgs).IntRegArgAddr (at 0x1006e9070) covered by 0x1006e9070-0x1006e9110
2024-07-28T18:47:09 07:00 debug layer=debugger Adding target 11503 "/Users/alaay/projects/scheduleasy/tmp/main"
2024-07-28T18:47:09 07:00 debug layer=debugger continuing
2024-07-28T18:47:09 07:00 debug layer=debugger ContinueOnce
2024/07/28 18:47:09 Starting server on :5602

VS コードを Delve にアタッチする

.vscode/launch.config ファイルに次の内容を追加します:

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Attach to Air",
      "type": "go",
      "request": "attach",
      "mode": "remote",
      "port": 2345,
      "host": "127.0.0.1"
    }
  ]
}

VS Code の実行とデバッグ (CMD SHIFT D) で、Attach to Air でデバッグを開始します

[!info] VS Code に接続できません
VS Code が接続できない場合は、Delve がポート 2345 で実行されていない可能性があります。 lsof -i :2345 を使用して、そのポートを使用して dlv が実行されているかどうかを確認してください。実行中の場合は、

が表示されるはずです。
$ lsof -i :2345
COMMAND   PID  USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
dlv     15464 username    3u  IPv4 0x201bff14586139e3      0t0  TCP localhost:dbm (LISTEN)

落とし穴

Go はコンパイル言語です。つまり、コードはバイナリにコンパイルされてから実行されます。 vscode のコードに変更を加えるたびに:

  • 空気は変化を監視します
  • バイナリを再構築します
  • 23時45分に探索を開始

これは、vscode が切断され、delve するには vscode を再接続する必要があることを意味します。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/nerdherd/setting-up-golang-on-vs-code-with-debugging-1kbe?1 侵害がある場合は、削除するために[email protected]に連絡してください。それ
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3