• 検索結果がありません。

GDBPerl

ドキュメント内 main.dvi (ページ 35-38)

debuggee pass

1

pass 2

pass 3

7.068 7.38 7.068 21.516

7.022 14.044

(sec.)

7.022 (sec.)

> 各手法の処理時間の内訳

上記のデバッギで、ド ライバプログラムによって自分自身の関数呼び 出しの入口へ逆実行した場合の実行時間。

! 従来手法に関してのみ、#$ 4##を行わなかった場合の処理 時間も計測した

計測の結果を表に示す。関数呼び出しの出口を捕捉するようになったことで、

通常実行時のデバッギの実行速度は従来手法よりも低下しているとは言え、微々た るものである。

一方、表より得られた実行時間の内訳は図のようである。!/の 起動に要した時間を除いた実行時間はおよそ 倍になっており、逆実行速度は パスからパスになった分、減少し 、新手法の効果を示している。

前述の通り、関数単位疑似逆実行はデバッグ作業中のプログラマがよく行う作業 のひとつを代行するものと言える。デバッグ作業では他にも実行制御のパターンが

この場合に限っては最初から目標点のタイムスタンプが分かっているので、 を不要に しても目標点に制御を移動できる。

存在するが 、関数呼び出しのみでタイムスタンプを更新する手法では実行制御の移 動先が限定されてしまう。実行制御の移動先として任意の場所を指示するためには より一般的な表現が必要となる。

章 プログラム実行点

一般的な実行制御を自動化するために、プログラム実行点という概念を用いる。こ れはプログラムの実行状態をその進捗度として表すものである。本章では実行点の 必要性とその表現方式について述べ、単純な応用である動的ブレークポイントを導 入する。

実行点の概念

デバッグを行っているとき、特にデバッガを用いているときに、多くのプログラ マはデバッギの進捗度(デバッギの実行がどこまで進んだか )を漠然とイメージし ている。それは例えば 、「この関数の呼び出しから戻ってきた、この場所」といった ようにソースコード に直接対応する形のこともあれば 、「木構造のトラバースで、こ のノード に到達したとき」などと、データ構造に対応する形のこともある。このよ うなデバッギの進捗度は、プログラムの実行過程における点と考えられることか ら、これをプログラム実行点と呼ぶことにする。

ここで、手続き型言語のプログラムが実行される場合について考えると、ソース コード の各行を制御構造に従って順に実行していくので、プログラムの実行の完全 なトレースは実行された行の時系列で表すことができる。これをプログラムの実行 系列と呼ぶ。プログラムが入力データなどによって振舞を変える場合は、同一のプ ログラムであっても実行系列は実行ごとに異なる。一般には、プログラムを実行す るごとに特定の実行系列が生まれる。プログラム実行点は、このような特定の実行 系列における絶対座標を表すものと考えることができる。

実行点の表現形式

概念としてのプログラム実行点を具体的に表現する形式を考えると、以下の通 りの表現が考えられる。

ステップ実行の回数 ステップ実行はデバッガで制御可能な最小単位の実行を実現す る。従ってこれを繰り返せば完全な実行系列を得ることができる。

デバッガコマンド 履歴 デバッガコマンド の履歴を再生すれば 、行った実行制御を再 現して同一の実行点に移動できる。

)

*

> ループ構造を持つデバッギ

(1) (2) (3) (1) (2) (3) (1) (2) (3)

ドキュメント内 main.dvi (ページ 35-38)

関連したドキュメント