-
rr の紹介
- rr は Linux 向けの C/C++ デバッグツールで、gdb を補完することを目的としている
- 失敗を一度記録し、その記録を繰り返しデバッグできる
- 毎回同じ実行を再現してデバッグ可能
- gdb を通じて効率的な逆方向実行を提供
-
rr の機能
- 低オーバーヘッド
- さまざまなアプリケーションの記録と再生をサポート(Firefox、Chrome、QEMU、LibreOffice など)
- マルチプロセスのワークロードを記録、再生、デバッグ可能
- gdb スクリプティングおよび IDE 統合をサポート
- 耐久性があり圧縮されたトレースファイルで、マシン間で移動可能
- 断続的なバグを再現するためのカオスモードを提供
-
rr デバッグ体験
- アプリケーションの記録:
rr record /your/application --args...
- 記録された実行をデバッグ:
rr replay
- 記録済みトレースを決定論的にデバッグ
- 一般的な gdb コマンドを使用可能
- 逆方向実行によって問題箇所へ素早く移動可能
-
動画
- Firefox の記録・再生デモ動画
- rr の基本機能を詳しく説明する動画
- Robert O'Callahan による高度な技術講演動画
-
はじめに
- ソースからビルド: パッケージが動作しない場合に推奨
- Fedora および Ubuntu でのインストール方法を提供
-
背景と動機
- 断続的な失敗のデバッグを容易にするために開発
- 決定論的再生により、デバッグ過程で得た情報の有効性が維持される
- 逆方向実行により、デバッグ作業がより容易になる
- rr は多くの大規模・小規模プロジェクトで定期的に使われている
-
rr の動作方式
- Linux ユーザー空間プロセスを記録し、カーネルからのすべての入力をキャプチャ
- 再生時には命令レベルの制御フロー、メモリ、レジスタ内容を保証
- メモリレイアウト、オブジェクトアドレス、レジスタ値などが同一に保たれる
- ファザーやランダム障害注入ツールと併用するとさらに強力になる
-
rr の文脈
- 記録・再生デバッグは古くからあるアイデア
- Firefox に重点を置いた設計目標
- 配布可能性: 一般的な Linux カーネル上で動作し、システム構成の変更が不要
- 低いランタイムオーバーヘッド
- シンプルな設計: 複雑な技術を回避
-
制限事項
- 単一コアマシンをエミュレート
- 記録ツリー外とメモリを共有するプロセスは記録不可
- 最新の x86 CPU または特定の ARM CPU が必要
- 記録対象プロセスが実行するすべてのシステムコールに関する知識が必要
- カーネル変更、システムライブラリ更新、新しい CPU ファミリへの対応が必要
-
追加参考資料
- 拡張技術レポート
- rr Wiki
- メーリングリストまたは chat.mozilla.org の #rr で質問可能
GN⁺ のまとめ
- rr は Linux での C/C++ デバッグ向けの強力なツールで、決定論的再生によってデバッグ効率を大きく向上させる
- 多様なアプリケーションとマルチプロセスワークロードをサポートし、低オーバーヘッドで実用的
- 逆方向実行機能により、デバッグ作業がさらに容易になる
- Firefox のような複雑なアプリケーションもデバッグでき、汎用的に有用
- 類似機能を持つツールとしては gdb や Valgrind がある
1件のコメント
Hacker Newsのコメント