鱒身(Masu_mi)のブログ

知った事をメモする場所。

Goのデバッグでgdbを使うための準備

tl;dr

Goの開発でデバッガが必要になりgdbを使った。goroutine の機能も提供されている らしく試したのだが上手くロードできなかった。 調べたらチケット切られ解決していたがコード修正が必要と書かれていた 。 特にpatchも見つからずmaster では未だ修正されていなかったためpatch化した。 ロードに関しては以下を実行すれば解決する。 しかし実際に使うには必要な修正は他にもあるらしく調べたり修正が未だ必要

$ git clone https://gist.github.com/5f1b8b08d9959b27c6dc.git
$ sudo patch -u /usr/local/go/src/runtime/runtime-gdb.py < ./5f1b8b08d9959b27c6dc/runtime-gdb.py.patch
patching file ${GOROOT}/src/runtime/runtime-gdb.py
修正されて goroutineを扱える状態のgdb

感想

goのgdb pluginはgoのバイナリをターゲットにした時にロード出来るようでターゲットが存在しない時にsource で読み込んでも失敗した。

何もターゲットプロセスが存在しないでloadしてみた

ここから広げて読んだ所goobjfile の書きかわるタイミングはロード時だけだった。goobjfiles が変更されたタイミングをフック出来れば柔軟になるかも知れない。 またgdb.Function, gdb.Command を継承したクラスのインスタンスを生成すればgdbに機能を追加できるみたいで遊べそうだと思った。