Friday, 27 November 2020

Rust compiler の trace 方法

まぁ、Haskell みたいにトレース不可能な感じではないんですが... 環境は二つ。明日、明後日で、読んでいきます。

環境は二つで

  サーバの Singulariy 上の debug build した rustc
  macOS上の rustc

下の方は LLVM なので gdb/lldb で。

Singulariy上の build いつもの python3 に引っかかって...

  update-alternatives --install /usr/bin/python python /usr/bin/python3 10`

とかやらないと python が python3 にならないらしい。

Singulariyの作り方も 「--sandbox` と `--writable` を使って段階的にビルドするのがいいらしい」ことらしく...

最後にビルドした結果をsifに変換するとできるらしい。微妙。

  singularity build --fakeroot debugging-rust-compiler.sif rust-debug

これに

  singularity shell /ie-ryukyu/singularity/rust-debug/debugging-rust-compiler.sif

として入って、中で trace します。sif は 5GB。VM並の大きさじゃん... 中に入ってみると 16GB。ふーん。

で、いけるかと思ったが.... break point がかからない。

  l rustc_parse::expr::parse_expr

くらいでいけるべきなのだが。結局、

  Singularity> nm /rust/rust/build/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc_driver-ce53599820ba664c.so | grep parse_expr

で mangling されたものに main で停めた後に

  b _ZN11rustc_parse6parser4expr45_$LT$impl$u20$rustc_parse..parser..Parser$GT$27parse_expr_catch_underscore17h43010b29c3bbcd9bE

とすると捕まって、その後は 

  l parse_expr

できるように。しかし、この方法は macOS ではだめでした。

source code debugger は C++ でもかなりだめでな〜 誰も debugger とか使ってないのかも知れん。

朝、10時からやるはずです。参加したい人は Facebook の DM くれれば Zoom の Link を送ります。

No comments: