今回やりたかったこと
プログラムを任意の場所で中断して、変数の値を参照したり、関数を実行したりしたい。
できたこと
Breakpointによるプログラムの中断・再開
ソースコードの特定行をダブルクリック、もしくは F9
を押すことでBreakpointを追加できます。
この状態でデバッガを起動しこの部分の処理が実行されると、Breakpointでプログラムが中断します。
中断後、以下のような操作が可能です。
操作 | 説明 | ショートカット |
---|---|---|
Step Over | 1行実行する(関数の中に入らない) | F10 |
Step Into | 1行実行する(関数の中に入る) | F11 |
Step Out | 関数の中から呼び出し元へ戻る | Shift+F11 |
Restart | プログラムを再開する | F5 |
変数の参照
Breakpointでプログラムが中断している状態で、サイドバーに変数の一覧が表示されます。
「WATCH」にはWatch式を追加することもできます。
できなかったこと
関数の実行
「DEBUG CONSOLE」に関数名を入れてみましたが、現状エラーとなるようです。
以下のISSUEで目下対応中のようなので、今後に期待ですね。
デバッグ環境の構築
前提
- macOSにVS Codeがインストールされている
- go1.14.1以降がインストールされている
delveのインストール
デバッグには delve というデバッガを使用しました。
go get github.com/go-delve/delve/cmd/dlv
sudo /usr/sbin/DevToolsSecurity -enable
macOS以外のOSをお使いの方は こちら のページを参照してインストールしてください。
VS CodeにGoのExtensionをインストール
VS CodeのExtensionsタブを開き、GoのExtensionをインストールします。
以上で準備完了です。
デバッグ手順
デバッグ対象のアプリケーションを取得
今回、デバッグ対象のアプリケーションとして以下を使わせていただきました。
以下コマンドを実行し、アプリケーションを取得・起動します。
git clone git@github.com:pangpanglabs/echosample.git
cd echosample
go mod init github.com/pangpanglabs/echosample # go moduleをONにしている場合のみ実行
go mod vendor # go moduleをONにしている場合のみ実行
go run main.go
http://localhost:8080/ へアクセスすると、アプリケーションが表示できます。
デバッガの起動
以下手順でデバッガを起動します。
- VS Codeを起動し、
echosample/main.go
を開きます - キーボードの
F5
を押します - (初回のみ)「Run and Debug 」をクリックします
注意: デバッガを起動するときは必ず main.go
を開いていることを確認するようにしてください
所感
普段はRuby on Railsを使った開発をしておりデバッグ時は binding.pry
を使っていたので、Go言語でも同様の方法を想定していました。
pry
だとソースコードの編集が必要ですし、ステップ実行が難しいという問題もありましたが、VS Code+delvenによるデバッグはその点が解消できています。
1点だけ不満を挙げるとするならば、Hot Reloadに対応するのが難しい点です。これは、「 Cmd+F5
→ F5
」を押してデバッガを再起動すればそこまで非効率ではないので、あまり苦ではないと思っています。
あとはプログラム中断時の関数呼び出しに対応するのを待つのみですね。