ブロックチェーン・AI・システム開発の株式会社INDETAIL

Windows対応中のGo言語のデバッガーdelveを試してみる

2016.01.08
mentaiko

gopher_1200

あけましておめでとうございます。mentaikoです。

私は時々Goで小さなツールを作っているのですが、デバッガを使ったことがなかったのでどんなものがあるか調べてみました。
今だと以下の3つがあるようです。

それぞれ調べていると、delveのプルリクエストに [WIP] Windows support #276があり、
コメントを見る限りそこそこ動いているようなので実際に試してみました。

delveビルド手順

以下の環境でビルドおよび動作検証しました。

  • Windows10 Home 64ビット版
  • go version go1.5.2 windows/amd64

MSYS2のgccをインストール

delveをビルドするためにgccが必要なので、MSYS2 installerを利用してMSYS2をインストールします。
インストールはサイトの手順通りに進めます。

  1. Windowsが64ビット版なのでインストーラも64ビット版のmsys2-x86_64-20150916.exeをダウンロードして実行します。
  2. インストーラはNextボタンおよび最後にFinishボタンでウィザードを進めます。
  3. インストールが終わったらスタートメニューに追加された「MSYS2 64bit」->「MinGW-w64 Win64 Shell」を実行します。
  4. システムパッケージを更新します。

  1. bashが更新されるのでいったん閉じて再度「MinGW-w64 Win64 Shell」を実行し、残りのパッケージを更新します。

  1. delveのダウンロードとビルドで必要なgit, make, gccをインストールします。

delveをインストール

まずはdelveの依存ライブラリをインストールするためにgo getでインストールします。
まだwindowsサポートはマージされていないのでビルドに失敗します。

次にプルリクエストされたブランチを取得します。
GoのパッケージはURLを含むのでフォークされたリポジトリをgo getしても参照されません。
そのため、以下のように元のフォルダを退避してgitで直接cloneします。

以上でdelveが$GOPATH/bin/dlvにインストールされます。

delveでデバッグ

まずはヘルプを見てみます。

dlv_usage

いくつかコマンドがあり、debugでデバッグできそうです。
試しに以下の簡単なコードをデバッグしてみます。

helpでコマンドリストが表示されました。コマンドはGDBと似ています。

dlv_help

mainパッケージのmain関数にブレークポイントを設定してcで実行してみました。
デバッグ対象のコードが表示されて使いやすそうです。

dlv_debug

nで進めていき、printで変数msgも表示します。

dlv_print

cで最後まで進めると終了しました。
最後にfmt.Println(msg)があるのでhelloが表示されるはずですがなぜか表示されません。
LinuxやMac OSXなら表示されるのでどこかに不具合があるのかもしれません。

dlv_continue

delveでリモートデバッグ

delveはリモートデバッグ機能も備えています。

リモート側は--listenでクライアントを待ち受けるIPとポートを指定し、
クライアント側はconnectコマンドで接続先を指定します。
下図はリモートデバッグを実行している様子です。
左がリモート側で右がクライアント側です。

dlv_connect

また、この機能はIntelliJのgo-lang-pluginやVS Codeのvscode-goのようなIDEやエディタ連携でも使われているようです。

まとめ

delveのWindows対応はほぼできているので、マージされれば各IDEやエディタも対応が進むと思われます。
余談ですが、プルリクエストを作ったLuke Hoban氏のプロフィールを見るとMicrosoft所属なんですね。
一昔前だと考えられない事なのですが、さすが中の人という事で感慨深いです。

mentaiko

JavaとVimが好きな開発者

コメントを残す

「いいね」ボタンを押すと、最新情報をすぐに確認できます。