Rustコンパイラのデバッグ出力を見る
Rustコンパイラの細かい挙動を追うには、コンパイラ内に設置してある debug!(..)
の出力を追う手がある。
デバッグ出力を有効化してコンパイラをビルドする
まず手元のRustコンパイラのソースから、デバッグ出力を有効化したコンパイラを作成する必要がある。
それにはまず src/bootstrap/config.toml.example
をコピーして config.toml
を作成し、以下の設定をする。
[rust] debug-assertions = true
この状態でビルドする。
$ ./x.py build
デバッグ出力を有効にしてコンパイラを起動する
RUST_LOG
環境変数によりログを制御することができる。
$ RUST_LOG=rustc_typeck,rustc_mir,rustc::ty build/x86_64-unknown-linux-gnu/stage1/bin/rustc test.rs
RUST_LOGのフォーマット
RUST_LOG
は以下のフォーマットを持つ。
- ログレベル指定
- ログレベル指定/フィルター
ログレベル指定はモジュールごとにカンマ区切りで指定する。カンマで区切られた各要素は以下のフォーマットに従う。
- ログレベル
- モジュール
- モジュール=
- モジュール=ログレベル
ログレベルは以下のどちらかである。
- 非負整数。
- error, info, warn, debug, traceのいずれかの文字列。大文字小文字は区別しない。それぞれ1,2,3,4,5に対応する。
ログレベルを省略したときは最大(全てのレベルが出力される)の意味になる。
ログレベルのみを指定したときはモジュールとして空文字列を指定したのとほぼ同じ動作をする。
モジュール指定は、ログ出力命令のあるモジュールのパスに、文字列として先頭一致で判定される。複数の指令に該当する場合は最長一致で採用される。
フィルターを指定した場合は、それが部分文字列として含まれているログのみ出力される。