関数単位疑似逆実行の高速化

English is here.

概要

デバッガを用いて関数呼び出し単位の疑似逆実行を
実現する方法のひとつとして,
プロファイル用の関数を置き換えることにより,
C プログラムにおける関数呼び出しの入口を捕捉する
方法が提案されている.
しかし,
この方法では関数からリターンするところを捕捉できないので,
逆実行時の停止目標点を決定するために,
(1)現在の実行点までスタックをシミュレートしながら
先頭から再実行し,
制御点の移動目標を決め(scan pass),
(2)実際に制御点をそこに移すために再度先頭から
実行する(re-execute pass)ことになっており,
本来不要なパス(1)が存在する.

本論文では,
コンパイラのアセンブリ言語出力を修正して関数から
リターンするところをも捕捉し,
スタックのシミュレーションを通常実行時に正確に
行うことによって,
従来手法では2パスを要していた逆実行時の処理を,
1パスで行う手法を提案する.
また,
通常実行時のオーバーヘッドと逆実行時のオーバーヘッドを,
経過時間の計測によって従来手法と比較する.

研究紹介のページへ