Skip to content

デバッグ

OXC_LOG 環境変数

OXC_LOGoxlintoxfmt の実行時トレースを有効にします。未設定ならログは無効で、オーバーヘッドはありません。

基本的な使い方

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_LOGtracing-subscriber の EnvFilter 構文を使います。

パターン意味
debugすべてのモジュールで debug レベル
traceすべてのモジュールで trace レベル
oxc_resolveroxc_resolver モジュールのログをすべて
oxc_resolver=debugoxc_resolver を debug レベルに
oxc_resolver=traceoxc_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-plugin

rust-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.jsonlaunch.json にリネームする
  • tests/cases/compiler/foo.ts を用意する
  • "${fileBasenameNoExtension}"foo.ts に変える
  • TypeScript のソースにブレークポイントを置く
  • メニュー「実行とデバッグ」、または F5
  • デバッグ中、tsc は対象ファイルより前にグローバルな .d.ts を評価する
  • src/compiler/debug.tsDebug.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 でプロセスが起動し、テスト用プロジェクト上でリンタを動かしつつデバッガをアタッチした状態になります。