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

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

1
2
3
$ 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

random note

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

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

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

comments powered by Disqus