Twitter上で、@alohakun が言及していた GDB の reverse debugging の機能を使ってみました。

まずは簡単な使い方を説明したあとに、インストール方法を説明します。

こんなときに便利 「変なこと」が起きている大体の場所がわかっているとき デバッグ中に、大体どこで変なことが起きているかはわかっているけど、細かい場所は特定できていないとき、reverse debuggingが効果を発揮します。

GDBでステップ実行をしていて、「しまった!行きすぎた!」という経験はよくあると思います。こういうとき、今まではプログラムの実行を最初からやり直してあげる必要があったのですが、reverse debuggingでは、next に対応する reverse-next や、stepに対応する reverse-step で前のステップや、前の行に戻って実行を繰り返すことができます。 Segmentation Faultで落ちた原因を調べる Segmentation fault でプログラムが落ちたとき、これまでのgdbではプログラムが落ちた時点での変数の値しか調べることができませんでした。Reverse debugging では、segmentation faultで落ちた時点から、プログラムの実行を遡って変数の値の変遷を調べることができます。