デバッグ

  • trace/0
  traceは実行することで、トレースモードを開始することの出来る述語です。
  トレースモード中は、コールする全述語の「成功」「失敗」「エラー」等が画面に表示されます。

  • 例 trace
 a.
 b.
 c.
 test:-a,b,c. 

普通に実行
| ?-test.
yes

トレース開始
| ?-trace.
yes
debug mode on
||?-test.
 [1] 0 Try   : test ? 
  Match   : test :-
		a,
		b,
		c.
 [2] 1 Try   : a ? 
  Match   : a.
 [2] 1 Succ  : a
 [2] 1 Try   : b ? 
  Match   : b.
 [2] 1 Succ  : b
 << LAST CALL >>
 [1] 0 Try   : c ? 
  Match   : c.
 [1] 0 Succ  : c
yes
LOOP = 5

トレース終了
||?-nodebug.
 [1] 0 Try   : nodebug ? 
 << BUILTIN CALL >>
yes
debug mode off
| 

  • 解説
trace実行前のtest述語の実行では、述語の実行結果のみが返ってきているのに対し、
trace実行後はtest述語内での各述語の実行結果についても表示されていることがわかります。


  • spy/1
  spyはトレース時に、引数で指定した述語に対して、他の言語で言うところのブレークポイントとして指定する述語です。
  spyの引数で指定された述語をスパイポイントと呼びます。
  spyを実行するとトレースモードに入り、その後、処理中にスパイポイントの含まれた述語を実行すると
  スパイポイントの箇所からのデバックが表示されます。


  • 例 spy
 a.
 b.
 c.
 test:-a,b,c. 

bという述語をスパイポイントに指定
| ?-spy(b).
yes
debug mode on
||?-test.
 [2] 1 Try   : b ? 
  Match   : b.
 [2] 1 Succ  : b
 << LAST CALL >>
 [1] 0 Try   : c ? 
  Match   : c.
 [1] 0 Succ  : c
yes
LOOP = 5

  • 解説
  前述したtraceの例と違って、spy(b)でスパイポイントに指定された、bという述語以降からデバッグが
  表示されることがわかります。


なお、デバッガについての説明は、以下のサイトに詳細が書かれていますので、こちらもご参照ください
Az-Prolog User's Manual Chapter7 デバッガ
http://www.az-prolog.com/manual/manuals/manual_debugging.html#debugger
最終更新:2014年05月07日 18:10