TRACER : プログラムトレース実行シミュレータ

プログラムは書かれたとおりに一行(または一ステップ)ずつ実行されていきます。その動きをわかりやすく可視化するシミュレータを作ってみました。
プログラムのどの部分が実行されているか、そのとき変数の値がどのように変化するかが図示されます。 一行の実行が終わると、次にどこを実行するか示し、そこで停止して次の Enter キーのタイプを待つ状態になりますので、利用者が自分のペースで一つ一つ理解しながら進行したり、講師が説明をはさむのに便利です。
(動作環境は京産大 cc 環境の Linux など、EGGX のインストールされている X11 が動作するシステム。)

上図では while によるループのなかで、まさに i が i++ によってその値を 2 に変更されたときの状態を示されています。 つまり、

といったことをしています。

シミュレートしているプログラムが printf( ) を実行すると、コマンドを実行したターミナルの画面上に、出力された文字が表示されます(下図参照)。この printf( ) の出力と、シミュレータのウィンドウ表示を見比べながら、プログラムの動きを感じてもらえればと思います。


資料

実行手順など

% ./tracer_pst -i i -i j for_sim_org.c for_sim.log
などとして実行します。操作手順は以下のようになります。
  1. このウィンドウをクリックし、画面の一番上に表示させる。
  2. Enter キーを押すごとに、一行ずつ実行される。このときプログラムのどの部分を実行し、変数の値がどのように変化するか図示される。
  3. 一行の実行が終わると、次にどこを実行するかが右矢印で示され、そこで停止して次の Enter キーのタイプを待つ。
実行時ログデータなどはディレクトリリストから取得できます。 そこから取得したデータを用いて下記のようにしてお試しください。
% ./tracer_pst -i i loop_sim_org.c loop_sim.log
% ./tracer_pst -i i -i j for_sim_org.c for_sim.log
% ./tracer_pst -i i -i j while_sim_org.c while_sim.log
% ./tracer_pst -i i -i j dowhile_sim_org.c dowhile_sim.log

このシミュレーションは実行時に実際に変数の動きをロギングしたものを記録し、再生するようにしています。例えば int i, j と書かれた変数の値は、実行の最初の時点では仕様では不定ですが、実際には何か値が入っているはずです。(ネコは生きているか死んでいるかのどちらかであって、それが不定のネコなんていない。)
シミュレータはそれを「不定値」とはせず、ただ値を記録し、表示するだけです。タイトルのプログラムでは i, j の値はそれぞれ -1881115952 0 でした。確かに冒頭の i=1 を実行する直前の状態では i, j の値はそれぞれ(たまたま)-1881115952 0 でした。しかしそれをそのまま提示するのは初心者に良い説明ではないかも知れません。
この辺りが気になるひとは log ファイルの値を手作業で ??? ??? などに変更してしまえば良いでしょう。プログラムはログに記録された値をただ表示するだけですから。(最初の i=1 を通過した後を 1 ??? にしておけばほぼ完璧に理想的?な表示になります。)


<<Back
Yutaka Yasuda (yasuda@cc.kyoto-su.ac.jp)