oxc の挙動を観察したいな〜と突然思って、oxc のデバッグ環境を VS Code で用意した。ちょっと躓いたのでメモを残しておく。
やりたいこと
- oxc のテストを VS Code から実行したい
- しかも VS Code 上から breakpoint を設定して、テストをステップ実行したい
Requirements
以下は事前にインストールしておく。
- VS Code
- Rust
- rust-analyzer 拡張機能
- rust-analyzer という Rust 向けの Language Server があって、それを VS Code から使うための拡張機能
- VS Code からテストを実行するための UI も提供してくれる
- プロジェクト内のテストケースを抽出して「Test Explorer」にそれを表示してくれたり
#[test]のすぐ下にインラインで「Run Test」「Debug (デバッガーを attach しながらテストを実行するモード)」ボタンを表示してくれたり
- CodeLLDB 拡張機能
- LLDB というデバッガーがあって、それを VS Code から使うための拡張機能
あと oxc のリポジトリも git clone して Contribution Guide を見ながらセットアップしておく。
breakpoint で止まらない
「Debug」ボタンからテストを実行しても、何故か breakpoint で止まらずに完走してしまう。

最初は rust-analyzer/CodeLLDB 拡張機能の設定が不十分なのかと思ったけど、特に怪しい設定もない。となるとテスト時に実行されるバイナリがなんかおかしいのか? と疑い始める。
テスト時に実行されるバイナリ
じゃあテスト時に実行されるバイナリはどこにあるのか。これは CodeLLDB 拡張機能のログを見るとわかる。

この program の部分がテスト時に実行されるバイナリになってる。実際に引数を伴って実行してみると、テストが実行できる。
$ ./target/debug/deps/oxc_parser-992051aabfe995a6 module_record::module_record_tests::import_default --exact --show-output
running 1 test
test module_record::module_record_tests::import_default ... ok
successes:
successes:
module_record::module_record_tests::import_default
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 53 filtered out; finished in 0.00s
バイナリの中身を見る
まあ多分シンボル情報が入ってないんじゃないか、と思うので中身を見てみる。macOS なら dsymutil コマンドなどでできるらしい。
$ dsymutil --statistics target/debug/deps/oxc_parser-992051aabfe995a6 warning: no debug symbols in executable (-arch arm64) .debug_info section size (in bytes) ------------------------------------------------------------------------------- Filename Object dSYM Change ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Total 0b 0b 0.00% -------------------------------------------------------------------------------
warning: no debug symbols in executable を見るに、やっぱりシンボル情報入ってなかったね... これなら breakpoint 仕掛けても止まらないの当然だ。
何故シンボル情報が含まれてないのか
普通テストを実行する際はデバッグビルドが実行されて、シンボル情報が埋め込まれるはず。なのに何故埋め込まれていないのか。その理由は oxc リポジトリの Cargo.toml に書いてあった。
// https://github.com/oxc-project/oxc/blob/ea3f362173247454190a737b9c0737fb26f43a3f/Cargo.toml#L241-L244 より引用 [profile.test] # Disabling debug info speeds up local and CI builds, # and we don't rely on it for debugging that much. debug = false
コメントなるほどね... debug = true にして無事解決しました。