Develop with pleasure!

福岡でCloudとかBlockchainとか。

Clion(gdb)を使ってbitcoindをデバッグ

bitcoindの挙動を追いたくなり、gdbを使ってデバッグしてみる。ただ、コマンドベースでブレークポイント貼ったり変数確認したりするのはシンドイので、Clionが2016.2からサポートしたgdbのRemote Debug↓を利用する。

CLion 2016.2 EAP: Remote GDB debug | CLion Blog

bitcoindのビルド

bitcoindのビルド時に、configureのオプションで--enable-debugを指定してビルドしたbitcoindを使用する。 このオプションを指定していないと、デバッグの際に変数値がgccによって最適化され参照できない。

gdbserverのセットアップ

Clionはgdbserverと連携してgdbによるデバッグを可能にしているので、gdbserverを起動する。

予めbitcoindを起動しておき、そのPIDを確認しておく。

$ gdbserver localhost:8081 --attach <bitcoindのPID>
Attached; pid = 23784
Listening on port 8081

でgdbserverを起動する。

Clionのデバッグ設定

続いて、Clion側の設定。事前に↓からbitcoindのソースを取得しClionでプロジェクトを作っておく。

github.com

2016.2からRun/Debug ConfigurationsでGDB Remote Debugが選択できるようになっているので、それを使ってgdbserverを使ったデバッグの設定を行う。

f:id:techmedia-think:20160926152105p:plain

'target remote' argsにさっき起動したgdbserverのホストとポートを設定する。設定はこれだけ。

あとは作成したコンフィグレーションを実行すると↑のgdbserver側に↓のように表示されデバッガが接続されたことが確認できる。

...
Remote debugging from host 127.0.0.1

あとはClion上でブレークポイントを貼れば、ブレークポイントで処理が止まって、いつものようにデバッグができる↓

f:id:techmedia-think:20160926152539p:plain

これでデバッグが捗る!