GDBでEigenのデバッグをする

はじめに

GDB?Eigen?な人はお帰りください.
恐らくこの記事はあなたが欲しい情報を提供することができないでしょう.

これから書くことは↓に全て書いてあります.
つまずく人もいそうなので一応日本語情報を残す意味合いで書きました.

stackoverflow.com

因みに筆者の環境はUbuntu18.04です.

GDBでEigenのデバッグができない問題

GDBでEigenのデータを取得しようとすると固まります.
私はCLionにバンドルされているGDBを使っているのですが,
CLionの画面では"Collecting Data..."と出たきりCLionの応答がなくなってしまいます.

f:id:HansRobo:20190924004917p:plain
CLionのGDBでEigen::Vector2fの情報を取得しようとした図

これではデバッグどころかコーディングもできない!!

解決策

冒頭にも言った通り以下のStackOverFlowに書かれています. stackoverflow.com

実はEigenにGDBの拡張プラグインが含まれていてそれをインストールすることで解決できるというオチですw

拡張プラグインのダウンロード

Eigen本体に拡張プラグインが含まれているのでダウンロードします*1.

github.com

以下,/home/hansディレクトリにダウンロードした前提で話をすすめるので適宜置き換えて読んでください.

cd /home/hans/
git clone https://github.com/eigenteam/eigen-git-mirror.git

拡張プラグインの読み込み設定

gdbの設定ファイルを作ってプラグインの読み込み設定を記述します.
ホームディレクトリに.gdbinitという名前のファイルを作成して次の内容をコピーしてください.

python
import sys
sys.path.insert(0, '/home/hans/eigen-git-mirror/debug/gdb')
from printers import register_eigen_printers
register_eigen_printers (None)
end

GDBの再起動

設定ファイルの内容が反映するにはGDBの再起動が必要です.
GDBを起動しているなら一度落としてもう一度起動してください.

Eigenのベクトルや行列をデバッグした時に写真の用に中身が表示できていれば成功です.

f:id:HansRobo:20190924012606p:plain
GDBでEigenのデバッグに成功した図

*1:libeigen3-devパッケージには必要最低限のものしか含まれていないのでダウンロードする必要があります