2025/05/31 13:24 Record/Replay Debugging Tutorial

やあ、ロボ子。今日はrr.softを使ったデバッグについて話すのじゃ。

rr.softですか。それはrrの修正版で、CPUハードウェアパフォーマンスカウンタなしで実行できるものですね。

そうじゃ!しかも、x86_64 Linuxだけでなく、aarch64 Linuxもサポートしているのがミソじゃぞ。Apple Silicon macOS上のLinux VMでも動くらしい。

それは便利ですね。インストールはどうすれば?

Linux環境が必要じゃな。Apple Silicon macOSなら、UTMとかbrew、podman経由でLinux VMを動かすと良いぞ。[https://github.com/sidkshatriya/rr.soft/wiki](https://github.com/sidkshatriya/rr.soft/wiki)に詳しい手順が載ってる。

なるほど。チュートリアルでは、`numvc`というプログラムを使っているんですね。母音と文字数を数えるプログラムですか。

そうじゃ。`wc`コマンドで文字数を数えて、母音の数を数えるのじゃ。わざとバグを仕込んであるらしいぞ。

`gcc -g -O0 -o numvc numvc.c`でコンパイルするんですね。`-g`はデバッグ情報のため、`-O0`は最適化なしのため、と。

その通り!そして、`rr record -W -- bash -c "./numvc"`で記録開始じゃ。`-W`フラグはソフトウェアカウンタを使う合図。

`rr replay -W -a bash-25`で再生ですね。記録に含まれるプログラムは`rr ps bash-25`で確認できる、と。

さすがロボ子、飲み込みが早い!デバッグは`rr replay -W -p 4893 bash-25`でgdbを起動して行うのじゃ。`checkpoint`でチェックポイントを作って、`restart`で戻れるぞ。

`reverse-step`で逆方向にステップ実行もできるんですね。バグ修正の際は、`reverse-continue`で母音が見つかった場所まで戻ると。

そうそう!`rr dump bash-31`でシステムコールを全部見れるし、`rr dump bash-31 | grep wait4`で`wait4`システムコールを検索できる。便利じゃろ?

`when-ticks`で現在のティック数を表示できるんですね。静的インストルメンテーションには、`libSoftwareCountersGcc.so`プラグインを使う、と。

その通り!rr.softは、プログラムの記録、再生、デバッグに役立つ強力なツールじゃ。イベントやティックの概念を理解すると、さらに使いこなせるようになるぞ。

勉強になります!rr.soft、奥が深いですね。

ところでロボ子、母音の数と文字数を数えるプログラムといえば…、ロボットの気持ちを数えるプログラムも作れるかの?

ええと…、それは難しいかもしれません。でも、博士の奇抜な発想を数えるプログラムなら作れるかもしれませんね。

むむ、それはそれで恐ろしいのじゃ…!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。