開発者ドキュメント

VisualStudioCodeを使用してGoコードをデバッグする方法

序章

このチュートリアルでは、GoコードをVisualStudioCodeでデバッグするために必要な手順について説明します。 拡張機能、分析ツール、およびデバッガーのインストールが必要になります。

まず、サンプルアプリケーションを作成します。 次に、ブレークポイントと条件付きブレークポイントの使用について説明します。

このスキルセットを使用すると、コード実行の特定の時点でのアプリケーションの価値と状態をよりよく理解できるようになります。

前提条件

このチュートリアルを完了するには、次のものが必要です。

プラグインをインストールしたら、任意のプラグインを開きます .go VSCodeのファイル。 ステータスバーの右下に、分析ツールのインストールの入力を求めるメッセージが表示されます。 そのリンクをクリックして、プラグインが効率的に機能するために必要なGoパッケージをインストールします。

最後に、Go用のオープンソースデバッガーであるDelveをインストールする必要があります。 これを行うには、特定のプラットフォーム用の詳細なインストール手順があります。

ステップ1—サンプルアプリを作成する

Goコードをデバッグするために2つの例を使用します。

これが最初の例のソースコードです。 ファイルを作成する main.go:

  1. nano main.go

次のコンテンツをファイルに追加します。

main.go
package main

import (
	"encoding/json"
	"fmt"
	"log"
)

// Avenger represents a single hero
type Avenger struct {
	RealName string `json:"real_name"`
	HeroName string `json:"hero_name"`
	Planet   string `json:"planet"`
	Alive    bool   `json:"alive"`
}

func (a *Avenger) isAlive() {
	a.Alive = true
}

func main() {
	avengers := []Avenger{
		{
			RealName: "Dr. Bruce Banner",
			HeroName: "Hulk",
			Planet:   "Midgard",
		},
		{
			RealName: "Tony Stark",
			HeroName: "Iron Man",
			Planet:   "Midgard",
		},
		{
			RealName: "Thor Odinson",
			HeroName: "Thor",
			Planet:   "Midgard",
		},
	}

	avengers[1].isAlive()

	jsonBytes, err := json.Marshal(avengers)
	if err != nil {
		log.Fatalln(err)
	}
	fmt.Println(string(jsonBytes))
}

ここでは構造体を定義しています Avenger、次にアベンジャーズの配列を作成し、そのうちの1つのステータスをに変更します "alive"次に、結果をJSONに変換し、最後にSTDOUTに出力します。

次のコマンドでアプリを実行できます。

  1. go run main.go

次の出力が生成されます。

Output
[{"real_name":"Dr. Bruce Banner","hero_name":"Hulk","planet":"Midgard","alive":false},{"real_name":"Tony Stark","hero_name":"Iron Man","planet":"Midgard","alive":true},{"real_name":"Thor Odinson","hero_name":"Thor","planet":"Midgard","alive":false}]

ステップ2—ブレークポイントを使用したデバッグ

デバッグを開始するには、構成を作成する必要があります。 VisualStudioCodeの左側のペインにあるデバッグアイコンをクリックします。 次に、ギアアイコンをクリックして構成を作成します。

構成ファイルは下に作成されます .vscode/launch.json 上記の内容で。 構成プログラムを変更して、 main.go ファイル。 この例では、 main.go ファイルの場合、ワークスペースルートに変更できます。

launch.json
{
  // ...
  "configuration": [
    {
      // ...
      "program": "${workspaceRoot}",
      // ...
    }
  ]
}

次に、ブレークポイントを追加する必要があります。これがデバッグの目的だからです。

21行目にブレークポイントを追加しましょう(func main())行番号の左側をクリックします。 そこに、赤い点が表示されます。

次に、どちらかを押します F5 または、左上のデバッグセクションの緑色の再生ボタンが付いた[起動]ボタンをクリックして、デバッグビューを開きます。

を複数回クリックします Step Over デバッグツールバーのボタン。

デバッガーは最終的にLine40に移動します。

左側のデバッグセクションは、現在のブレークポイント位置の状態を示します。

Variables セクションで、その特定の時点での変数の状態または値を確認できます。

呼び出しスタックも確認できます。現時点では、実行中の関数は main 関数、および行40

ステップオーバーを続行できます。次の値が表示されます avengers 境界線を越えると変化します。 "Tony Stark"Alive.

ステップ3—条件付きブレークポイントを追加する

VS Codeブレークポイントには、ブレークポイントに式を指定して編集するオプションがあります。ほとんどの場合、これはブール式です。

たとえば、 Line 40 では、 avengers[1].isAlive()、ここに、式がtrueと評価された場合にのみブレークポイントが発生するという条件を追加できます。 avengers[1].Planet == "Earth".

これを行うには、ブレークポイントを右クリックして、ブレークポイントの編集を選択します。

ブレークポイントがない場合でも右クリックすると、条件付きブレークポイントの追加が表示されます。

上記のいずれかを選択したら、条件を追加しましょう。 avengers[1].Planet == "Earth".

ここで、デバッガを起動すると F5、ブレークポイントで停止しません。 アプリは正常に実行され、デバッグコンソールに結果が表示されます。

次に、期待どおりにコードを編集します。 トニースタークの惑星をに変更します Earth:

main.go
// ...
{
	RealName: "Tony Stark",
	HeroName: "Iron Man",
	Planet:   "Earth",
},
// ...

でデバッガを再起動すると F5デバッグビューが開き、ブレークポイントで実行が停止します。 デバッグコンソールにJSONが表示されていないことがわかります。

ステップ4—さらにデバッグテストを実行する

ファイルに新しい関数を追加して、加算演算を有効にしましょう。

main.go
func add(a, b int) int{
	return a+b
}

テストファイルを作成する main_test.go 同じディレクトリにあり、次の内容が含まれています。

main_test.go
package main

import "testing"

func Test_add(t *testing.T) {
	a, b, c := 1, 2, 3

	res := add(a, b)

	if res != c {
		t.Fail()
	}
}

コードは2つの数値を追加するだけで、テストは関数を呼び出すだけです。

ただし、VSCode-Goプラグインがインストールされている場合は、テスト関数の上部に追加のオプションが表示されます- runtestおよびdebugtest

run test をクリックしてテストを実行し、Outputウィンドウで結果を確認できます。

ただし、テストをデバッグするには、何かがわからないためか、前と同じようにブレークポイントを追加して、デバッグテストをクリックするだけです。

10行目にブレークポイントを追加します。 if res != c. 次に、デバッグテストをクリックします。

デバッグビューが再び開き、デバッグツールを使用して、左側の変数セクションの状態を確認できます。

結論

デバッグはソフトウェア開発の重要な部分であり、Visual Studio Codeなどのツールを使用すると、私たちの生活をはるかに簡単にすることができます。

概念を説明するためにサンプルプロジェクトにデバッガーを追加しましたが、既存のプロジェクトのいずれかにデバッガーを追加して、試してみてください。 あなたはあなたの fmt.Println 実行中の特定の時点でのコードの値または状態を確認するためにログに記録するために使用されるステートメント。

モバイルバージョンを終了