制御フローの完全なログを取りたいときには、traceを使います。
対話的なフルスクリーンのデバッギングは便利ですが、すべての述語の呼び出し・ポート入出力の単純なログをデバッギングが必要である場合もあります。これは、非対話的なツールを使って、プロファイリングのために実行ログを分析するときに、特に必要です。このような場合、trace/0の述語は非常に便利です。
IF/Prologは、すべてのトレーシングログが送られる現在エラーストリームの概念をサポートしています。このストリームは、tell/1、telling/1、told/0の標準述語により管理される現在出力ストリームと同様に、trace/1、tracing/1、traced/0の述語によって操作されます。
まず、trace/1を使用して、トレース出力先をファイルにして下さい。trace/0を使って、トレースモードをonにして、インタプリタのプロンプト"trace ?-"のところに、トレースモードにてゴールを入力して下さい。すべてのトレース出力は、このファイルに行きますが、その出力をこの例の中のスクリーンに現れたものとして示しています。 UNIXのgrepコマンドあるいは他の使用システムの要件に合うパターンでこれを編集し、呼び出しを引きだした後に、このファイルをプリントすることもできます。 notrace/0でトレースモードを出、traced/0でファイルを終了します。
デバッギングの場合と同様、トレーシング用に簡単な述語を作ることができます。レファレンスマニュアルのtrace_mode/4の章を参照して下さい。
?- trace(buglisting), trace.
yes trace ?- run_prog. { 1.1 run_prog } これはファイル"buglisting" { 2.1 get_input } に指示されているエラ−スト { 3.1 read_line } リ−ムの出力になります { . . . } { 2.2 verify_command } no trace ?- notrace.
yes ?- traced.
yes ?- _
| scroll to top |
|