デバッグ
OXC_LOG 環境変数
OXC_LOG は oxlint と oxfmt の実行時トレースを有効にします。未設定ならログは無効で、オーバーヘッドはありません。
基本的な使い方
bash
# oxlint でデバッグログ
OXC_LOG=debug oxlint
# oxfmt でデバッグログ
OXC_LOG=debug oxfmt
# import プラグイン利用時にリゾルバのトレース
OXC_LOG=oxc_resolver oxlint --import-plugin
# フォーマッタのトレース
OXC_LOG=oxc_formatter oxfmtフィルタの書き方
OXC_LOG は tracing-subscriber の EnvFilter 構文を使います。
| パターン | 意味 |
|---|---|
debug | すべてのモジュールで debug レベル |
trace | すべてのモジュールで trace レベル |
oxc_resolver | oxc_resolver モジュールのログをすべて |
oxc_resolver=debug | oxc_resolver を debug レベルに |
oxc_resolver=trace | oxc_resolver を trace レベルに |
oxc_formatter,oxc_resolver | 複数モジュールを指定 |
出力の行き先
ログは標準エラーに出し、リンタの診断やフォーマット結果の標準出力と混ざらないようにします。oxfmt ではマルチスレッドの調査のため、スレッド名や span のタイミング情報が含まれることもあります。
よくある用途
処理しているファイルの一覧を見る:
bash
OXC_LOG=debug oxlint
OXC_LOG=debug oxfmtモジュール解決まわりを調べる:
bash
OXC_LOG=oxc_resolver=debug oxlint --import-pluginrust-lldb
デバッグビルドからパニック情報を取るのに rust-lldb が使えます。
デバッグシンボルを有効にします。
toml
[profile.release]
debug = true
strip = false
panic = "unwind"ビルド:
bash
cargo build --release --bin oxlint --features allocator実行:
bash
rust-lldb -- ./target/release/oxlint起動後、r でプログラムを走らせます。
VSCode で TypeScript をデバッグする
TypeScript リポジトリの デバッグ手順 によると:
.vscode/launch.template.jsonをlaunch.jsonにリネームするtests/cases/compiler/foo.tsを用意する"${fileBasenameNoExtension}"をfoo.tsに変える- TypeScript のソースにブレークポイントを置く
- メニュー「実行とデバッグ」、または F5
- デバッグ中、tsc は対象ファイルより前にグローバルな
.d.tsを評価する src/compiler/debug.tsのDebug.formatXXX(value)で列挙値などを表示できる- 「ウォッチ」で注目する値を追える
VSCode でリンタをデバッグする
CodeLLDB を使うと、別ディレクトリの npm プロジェクトに対してリンタをデバッグしやすくなります。
.vscode/launch.json の例(パスや引数は環境に合わせて変えてください):
cwd: テストしたい npm プロジェクトの絶対パスargs: リンタに渡す引数
json
{
"type": "lldb",
"request": "launch",
"name": "Debug Oxlint",
"cargo": {
"env": {
"RUSTFLAGS": "-g"
},
"args": ["build", "--bin=oxlint", "--package=oxlint"],
"filter": {
"name": "oxlint",
"kind": "bin"
}
},
"cwd": "PATH-TO-TEST-PROJECT",
"args": ["--ARGS-TO-OXLINT"]
}VS Code のデバッグパネルから Debug Oxlint を選んで開始します。指定した cwd でプロセスが起動し、テスト用プロジェクト上でリンタを動かしつつデバッガをアタッチした状態になります。