rustでbreakpointを使ったときの話
2022年 08月 16日 火曜日
rust でbreakpointを使いたい
- console+rustの組み合わせでbreakpoint使いたくなったので、一番手っ取り早く使えそうだったrust-lldbを使ったみた
- appの規模が小さめでとりあえず軽くチェックしたいくらいのお気持ちでした
1. 実行前の準備
- rustのinstallのタイミングで
rustup
やcargo
と合わせてinstallされてたみたいなので特に準備するものはなかった - LLDBに関して: https://ja.wikipedia.org/wiki/LLDB
2. rust-lldbを使ってみる
~/git/dev/rust_app main
❯ rust-lldb target/debug/rust_app
(lldb) command script import "/Users/dev/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/etc/lldb_lookup.py"
(lldb) command source -s 0 '/Users/dev/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/etc/lldb_commands'
Executing commands in '/Users/dev/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/etc/lldb_commands'.
(lldb) type synthetic add -l lldb_lookup.synthetic_lookup -x ".*" --category Rust
(lldb) type summary add -F lldb_lookup.summary_lookup -e -x -h "^(alloc::([a-z_]+::)+)String$" --category Rust
(lldb) type summary add -F lldb_lookup.summary_lookup -e -x -h "^&(mut )?str$" --category Rust
(lldb) type summary add -F lldb_lookup.summary_lookup -e -x -h "^&(mut )?\\[.+\\]$" --category Rust
(lldb) type summary add -F lldb_lookup.summary_lookup -e -x -h "^(std::ffi::([a-z_]+::)+)OsString$" --category Rust
(lldb) type summary add -F lldb_lookup.summary_lookup -e -x -h "^(alloc::([a-z_]+::)+)Vec<.+>$" --category Rust
(lldb) type summary add -F lldb_lookup.summary_lookup -e -x -h "^(alloc::([a-z_]+::)+)VecDeque<.+>$" --category Rust
(lldb) type summary add -F lldb_lookup.summary_lookup -e -x -h "^(alloc::([a-z_]+::)+)BTreeSet<.+>$" --category Rust
(lldb) type summary add -F lldb_lookup.summary_lookup -e -x -h "^(alloc::([a-z_]+::)+)BTreeMap<.+>$" --category Rust
(lldb) type summary add -F lldb_lookup.summary_lookup -e -x -h "^(std::collections::([a-z_]+::)+)HashMap<.+>$" --category Rust
(lldb) type summary add -F lldb_lookup.summary_lookup -e -x -h "^(std::collections::([a-z_]+::)+)HashSet<.+>$" --category Rust
(lldb) type summary add -F lldb_lookup.summary_lookup -e -x -h "^(alloc::([a-z_]+::)+)Rc<.+>$" --category Rust
(lldb) type summary add -F lldb_lookup.summary_lookup -e -x -h "^(alloc::([a-z_]+::)+)Arc<.+>$" --category Rust
(lldb) type summary add -F lldb_lookup.summary_lookup -e -x -h "^(core::([a-z_]+::)+)Cell<.+>$" --category Rust
(lldb) type summary add -F lldb_lookup.summary_lookup -e -x -h "^(core::([a-z_]+::)+)Ref<.+>$" --category Rust
(lldb) type summary add -F lldb_lookup.summary_lookup -e -x -h "^(core::([a-z_]+::)+)RefMut<.+>$" --category Rust
(lldb) type summary add -F lldb_lookup.summary_lookup -e -x -h "^(core::([a-z_]+::)+)RefCell<.+>$" --category Rust
(lldb) type category enable Rust
(lldb) target create "target/debug/rust_app"
Current executable set to '/Users/dev/git/dev/rust_app/target/debug/rust_app' (arm64).
(lldb) b 11
Breakpoint 1: where = rust_app`rust_app::func_a::hd9ccaf1610e891c9 + 56 at main.rs:14:9, address = 0x000000010000b6f8
(lldb) run
2. 雑記
- appの規模が小さめだったのでサクッと終わってよかったが、
binding.pry
の強さを改めて実感- 最近、
ipython
のembed()
で地味にハマったので・・・
- 最近、
gdb
がx86_x64
のみサポートされていることをbrew install
を実行して知った
この記事をシェア