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

提供:Dev Guides
移動先:案内検索

序章

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

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

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

前提条件

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

  • 囲碁の理解。 詳細については、Goシリーズのコーディング方法をご覧ください。
  • マシンにインストールしてください。 マシンにGoをインストールするには、チュートリアルに従って、Goシリーズからオペレーティングシステムのローカルプログラミング環境をセットアップします。
  • Visual StudioCodeがマシンにインストールされています。
  • VSCide-Goプラグインがインストールされています。

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

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

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

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

  • JSONファイルを生成するGoプログラム。
  • 関数を記述し、テストを記述し、VSCodeでテストをデバッグする方法を確認します。

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

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に出力します。

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

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}",
      // ...
    }
  ]
}

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

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

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

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

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

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

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

コールスタックも確認できます。現時点では、実行中の関数はmain関数、および Line40です。

ステップオーバーを続行できます。ラインを超えると、avengersの値が変化するのがわかります。 "Tony Stark"Aliveです。

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

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

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

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

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

上記のいずれかを選択したら、条件を追加しましょう: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ステートメントを減らして、実行中の特定の時点でのコードの値または状態を確認します。