ホームページ  >  記事  >  バックエンド開発  >  VS Code で Golang をデバッグするための Delve と Air のセットアップ

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

王林
王林オリジナル
2024-08-10 06:49:32847ブラウズ

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 回実行するだけで済むコマンド ライン ツールです。

インストール

パッケージをインストールします。 go 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 .'"'

[!info]
次の場合、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 が切断され、調査するには vscode を再接続する必要があることを意味します。

以上がVS Code で Golang をデバッグするための Delve と Air のセットアップの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。