tjun月1日記

なんでもいいので毎月書きたい

GAE/Goをdelveでデバッグする

AppEngine/Goでこれまで開発していて、必要な箇所はログを出していれば状態が取れていたのであまりデバッガが使いたくなることがなかったんですが、 最近ちょっとデバッガを使いたい状況があり、AppEngine/Go のローカルサーバに対してDelveをつないでデバッグしたので、やり方を書いておきます。

※基本的に以下はMacでのやり方になります。Linuxもそんなに変わらないと思う。

準備

Delveをインストールします。

go get -u github.com/derekparker/delve/cmd/dlv

GUIを提供する gdlvというのも入れてもいいかもしれません。

サーバを起動

AppEngine/Goのローカルのサーバを立ち上げます。このとき、オプションが必要です。

goapp serve -debug <PATH_TO_YAML_DIR>

または、

dev_appserver.py --go_debugging  <PATH_TO_YAML_DIR>

以前は、delveAppengineなどを使う必要があったみたいですが、今はdebugオプションがあるので不要になりました。

delveをアタッチ

まずアタッチするプロセスのpidを調べます。

$ ps au | grep _go_app

52613 ttys003    0:00.03 /var/folders/wn/xxxxxxxxxxxxxxxxx/T/tmptMHgJNappengine-go-bin/_go_app

アタッチします

dlv attach <pid>

ここは、sudoが必要かもしれません。 また、自分の環境では MacのOS のversionが古いせいか、以下のようにpathを指定する必要がありました。

dlv attach 52613 /var/folders/wn/xxxxxxxxxxxxxxxxx/T/tmptMHgJNappengine-go-bin/_go_app

delveでデバッグする

あとは、delveでブレークポイント貼ってデバッグしていく感じです。 ここでは解説しませんが、 bブレークポイント貼って、cで回して、nでステップ実行して、 sでステップインして、pで見たい変数見て、lで今いるところを確認する、くらい知っておけばとりあえず使えると思います。 delve/Documentation/cli

初めて使いましたが gdbっぽい感じで使えてあまり違和感なかったです。

その他

たぶん設定すればエディタと連携してもっと便利に使えると思います。

以上です。