0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VSCodeで、Eigenのデバッガーの表示をいい感じにする

Last updated at Posted at 2025-12-01

導入

Eigenは、優秀な行列計算のためのライブラリです。

Eigenはとても便利ですが、GDBなどのデバッガを使ってデバッグしようとすると、厄介なことになります。以下は、EigenのVectorXd型の変数、eigenvaluesの中身をデバッガ(GDB)で見てみた時の中身です。
image.png
とてもベクトルを表した変数だとは思えません。今回は、これを正しく表示できるようにしていきます。

環境

Windows上でVisual Studio Codeを使用し、デバッガはVSCode上でGUIのものを利用して見ることを想定します。また、記事の後半でCMakeToolsを使ったデバッグのときの設定も記します。

デバッガとして、GDBかmsvcを用いることとします。

1. GDB・MSVCの共通の準備

ダウンロードしたEigenのフォルダの中に、eigen-x.x.x/debug/というフォルダがあると思います。この中にgdbというフォルダとmsvcというフォルダがあるので、このうちのいずれかを利用します。vcpkgなどを利用してEigenを利用している場合は、Eigenのフォルダの中にdebugフォルダはないと思うので、自分でダウンロードしましょう。

また、CMakeToolsを使わない場合は、あらかじめlaunch.jsonの設定を済ませておき、デバッグ自体は行えるようにしておきましょう。

次の章では、GDBを用いた場合のやり方について書きます。
MSVCを用いたやり方は、「3. MSVCを用いた場合」をご覧ください。

2. GDBの場合

以下は、GDBを利用した場合のやり方です。

まず、先ほどの/debug/gdbフォルダを適当な場所に配置します。そのままの場所でも構いません。

次に、適当な場所に.gdbinitという名前のファイルを作成します。これはGDBの起動時の初期化のためのファイルであり、通常、グローバルな設定を書いたものをホームディレクトリに、そうでない設定を書いたものはプロジェクトのディレクトリに置いたりするそうです。今回は、プロジェクトのディレクトリの一番上に置くことにしましょう。ファイルの中身は以下のようにしておきます。

.gdbinit
python
import sys
sys.path.insert(0, "eigen-x.x.x/debug/gdbへの絶対パス")
from printers import register_eigen_printers
register_eigen_printers(None)
end

ちなみに、この内容はeigen-x.x.x/debug/gdb/printers.pyのファイル冒頭のコメントに記されています。

2.1 (CMakeToolsを用いない場合)

launch.jsonの中身を書き換えます。launch.jsonの"configurations"に、"setupCommands"を追記し、以下のようにします。

launch.json
{
    "configurations":[
        {
            "name": "hoge",
            "type": "cppdbg",


            "中略":"中略",


            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": false
                },
                {
                    "description": "Load .gdbinit",
                    "text": "source ${workspaceFolder}/.gdbinit",
                    "ignoreFailures": false
                }
            ]
        }
    ]
}

以上で設定は終わりです。

2.2 (CMakeToolsを用いる場合)

launch.jsonの代わりに、setting.jsonを変更します。まだ作っていない場合は、.vscodeフォルダ内に新しく作成してください。
内容は以下の通りです。

settings.json
{
    "cmake.debugConfig": {
        "setupCommands": [
            {
                "description": "Enable pretty-printing for gdb",
                "text": "-enable-pretty-printing",
                "ignoreFailures": false
            },
            {
                "description": "Load .gdbinit",
                "text": "source ${workspaceFolder}/.gdbinit",
                "ignoreFailures": false
            }
        ]
    }
}

ここに書いてある内容は、2.1で書いたものとほとんど同じです。

3 MSVCを用いた場合

MSVCを用いる場合では、debug/msvcフォルダにあるeigen.natvisファイルを使用します。
そのままの場所でも構いませんし、適当なフォルダにコピーしても大丈夫です。
CMakeToolsを用いない場合は、launch.jsonを以下のように書き換えます。

launch.json
{
    "configurations":[
        {
            "name": "hoge",
            "type": "cppdbg",


            "========":"========",
            "中略":"中略",
            "========":"========",


            "visualizerFile": "eigen.natvisへのパス"
        }
    ]
}

CMakeToolsを使わない場合の設定はこれで完了です。

CMakeToolsを用いる場合は、.vscode/settings.jsonを作成し、settings.jsonを以下のように書き換えます。

settings.json
{
    "cmake.debugConfig": {
        "visualizerFile": "eigen.natvisへのパス"
    }
}

これで設定は完了です。

4. 表示結果(共通)

良い感じにベクトルっぽく表示できました。
image.png

行列の場合でも、以下のようにすべての成分を示すことができます。
image.png

いかがでしたか?

もっと洗練させた設定もできるかもしれませんが、これ以上は分かりませんでした!

Eigen以外でも、良い感じに表示したいものがあれば、自分でprinters.py.natvisのファイルを作ることもできるらしいので、試してみてください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?