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
っぽい感じで使えてあまり違和感なかったです。
その他
たぶん設定すればエディタと連携してもっと便利に使えると思います。
以上です。