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でプロジェクトを作っておく。
2016.2からRun/Debug ConfigurationsでGDB Remote Debugが選択できるようになっているので、それを使ってgdbserverを使ったデバッグの設定を行う。
'target remote' args
にさっき起動したgdbserverのホストとポートを設定する。設定はこれだけ。
あとは作成したコンフィグレーションを実行すると↑のgdbserver側に↓のように表示されデバッガが接続されたことが確認できる。
... Remote debugging from host 127.0.0.1
あとはClion上でブレークポイントを貼れば、ブレークポイントで処理が止まって、いつものようにデバッグができる↓
これでデバッグが捗る!