vscodeでVimのソースコードをデバッグする

2022/12/08に公開

Vimのソースコードをデバッグするのに、GUIのデバッガーが欲しくなったので、
大変心苦しくはありますが、vscodeの力を借りることにしました。
vscodeは普段全く使いませんし、C/C++は学校で習って以来なので、この記事の信頼性はかなり低いです。

環境

  • M1 Macbook Air (arm64)
  • clang 14.0.6
  • lldb 14.0.6
  • vscode 1.73.1

armだとgdbは多分使えないです。代わりにlldbを使います。

やりたかった事

:findwildignore を設定していても遅いので、それを直したかったです。
vim-jpの偉い方々によれば、先にファイル名を展開してるかららしいです。

vimのビルド・テスト

まずはダウンロード

$ git clone https://github.com/vim/vim.git
$ cd vim

src にソースコードが大量にあって、src/testdir にテストファイルがあります。

ビルドはシンプルに

$ make

テストは、src/testdirに行って、make <テストファイル名>

$ cd src/testdir
$ make test_findfile

これだけでOKです。

デバッガーの設定

まずは、CodeLLDBをインストールします。
続いて先ほどのテスト実行した時のスクリプトを見ながら、vscodeのlaunch.jsonに追記します。

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch LLDB",
            "type": "lldb",
            "request": "launch",
            "program": "${workspaceFolder}/src/vim",
            "args": [
                "-f",
                "-u",
                "unix.vim",
                "-U",
                "NONE",
                "--noplugin",
                "--not-a-term",
                "-S",
                "runtest.vim",
                "test_findfile.vim",
                "--cmd",
                "au SwapExists * let v:swapchoice = \"e\"",
            ],
            "env": {
                "VIMRUNTIME": "${workspaceFolder}/runtime"
            },
            "cwd": "${workspaceFolder}/src/testdir",
        },
    ]
}

これでブレークポイントを設置しても引っかからないので、デバッグビルドします。
src/Makefile からそれっぽい行をコメントアウトします。

Makefile
CFLAGS += -g -O0 -DDEBUG -Wall -Wshadow -Wmissing-prototypes

ビルドし直します。

make clean
make

できました。
さて、皆さんも、vscodeのVim本体のソースコード読んで行きましょう。

いつか、Vimでデバッグもやってみたいです。

GitHubで編集を提案

Discussion