next up previous contents
Next: ポートの制御 Up: 2.3.2 トレーサの各コマンドの詳細 Previous: デフォルトトレースフラグ設定機能

スパイ制御機能

スパイ制御機能コマンドを以下に示す.

S 述語
指定した述語にスパイを掛ける. 述語名を指定しないと, 現在トレースしている述語にスパイが掛かる.

N 述語
指定した述語のスパイを外す. 述語名を指定しないと, 現在トレースしている述語のスパイが外れる.

実行制御コマンドで説明した ` l' コマンドは, スパイされたゴールが ポートを通るまで, トレースの表示・入力を抑制する.

このため, スパイ機能と ` l' コマンドを組合わせて使うと, ある特定 の述語だけにトレースを掛けてデバッグを進めることができる.

以下にスパイと ` l' コマンドの使用例を示す.

% subset -t                                                            1
   1 CALL:main:main? S member
	Spy point set on predicate main:member/3
   1 CALL:main:main? l
   4 CALL:main:member(3,[1,3,5],_11)?                                  5
   4 REDU:main:member(3,[1,3,5],_11) :-
   6   0:+member(3,[3,5],_11)? 
   6 CALL:main:member(3,[3,5],_11)? 
   6 REDU:main:member(3,[3,5],yes)? 
   5 CALL:main:subset(yes,[1],[1,3,5],_3)?                            10
   5 REDU:main:subset(yes,[1],[1,3,5],_3) :-
   7   0:+member(1,[1,3,5],_21)
   8   1:+subset(_21,[],[1,3,5],_3)? 
   7 CALL:main:member(1,[1,3,5],_21)? 
   7 REDU:main:member(1,[1,3,5],yes)? N member                        15
	Spy point reset on predicate main:member/3
   7 REDU:main:member(1,[1,3,5],yes)? 
   8 CALL:main:subset(yes,[],[1,3,5],_3)? 
   8 REDU:main:subset(yes,[],[1,3,5],yes)? 
   3 CALL:io:outstream([print(yes),nl])? s                            20
yes
%

2行目で, 述語 main:member/3にスパイを掛けている. 3行目のゴール main:mainにおいて, ` l' コマンドを実行することにより, main:member/3を実行したところからトレースが始まる.



next up previous contents
Next: ポートの制御 Up: 2.3.2 トレーサの各コマンドの詳細 Previous: デフォルトトレースフラグ設定機能



KLIC