% hcl HCL Version 1.6, Release 2.0(Last change: July 20, 1991) [April 29, 1991,The Green-Day version] (C) Tsuyoshi Yamamoto, Hokkaido University. Starting Lisp Listener [USER] [1]->(do-symbols (x) (print x))[1]はこの入力が1回目の対話であることを示し、後でこのformを 再実行したい場合は(redo 1)でできます。この数字は対話の度に増加します。 redoにはこの他にいくつかの機能が組み込まれています。
[3]->(print *gc*) ....... [12]->(redo print) ;;過去に行ったprintのうちもっとも最近 ;;行ったものを捜して再実行する。
[3]-> (defun foo (x)(+ x 100)) foo [4]-> (redo 3 + *) ;; (defun foo (x)(* x 100))と等価
コンパイルされた関数がエラーを検出した場合にもデバッガが起動されますが その場合にはコンパイルされた環境はもはや見ることはできません。関数呼び出 し履歴も陽にeval,apply,funcallによって呼び出された場合以外は見えなくなります。 デバッガのコマンドについてはデバッガ起動後 :hを入力すればその時点で 使用できるコマンドがリストされます。
HCl ではエラー発生時にデフオルトで組み込みデバッガが起動されプログラムの 実行が中断されます。PSL等では error-set 等によってエラー後のプログラムの自動実行を可能とするメカニズムが組み 込まれていますがCommon Lispの規格にはこの機能が定められていません。 HCl ではデバッガのデフオルトコマンドの機能を用いてerror-setを シミュレートします。このためにシステム変数、 system::*debug-defaultsが用意されています。この値は通常はnilですが ここにデバッガコマンドのリストをセットすることができます。その場合、 デバッガはデバッグコマンドをコンソールからではなく system::*debug-defaultsから順次取り出し実行します。このコマンドとして (throw exit {form}*)をセットすればデバッガはそのコントロール を直接指定されたcatcherに渡しますのでエラー発生後でもコンソールとの 対話を経ずプログラムの実行を継続できます。
[1]->(setq system::*debug-defaults '(:q) ) ;;エラーが発生した場合にデバッガに ;;留まらずにすぐトップレベルに戻る。 [2]->(setq system::*debug-defaults '(:t (throw 'error-set nil))) ;;エラーが発生したら関数呼び出し履歴を印刷し、 ;;error-setキャッチヤ へ制御を渡す。
[1]->(step (foo 1 2 3))は(foo 1 2 3)の実行をeval,apply,funcallの度にデバッガモードに入り 動作状態を監視できます。ステップモードでのコマンドはデバッガのそれと 基本的に同じですが、ステッパ特有の機能もあるので詳細は:hコマンドに よるhelpメニューを参照してください。
システム変数system::*step-defaults はステッパが起動された時、自動的に実行されるデバッグコマンドのリスト を保持します。デフオルトはnilです。このリストのコマンドが全部実行された あと、コンソールとの対話モードに入ります。
[1]->(defun fac (x)(if (= 0 x) 1 (* x (fact (1- x)))) fact [2]->(system::*profile (fact 3)) fact 4 ;;factは4回呼び出された * 3 1- 3 = 3 if 4 nil [3]->
[1]->(system::set-break-point caaar) Setting breakpoint at function caaar nil ;; caaarにブレークポイントをセット [2]->(let ((x '(((2)))) (caaar x)) Continuable error: Break point at function caaar Error signaled by function cerror If continued: Continue [1]DEBUG>>:v ;;デバッグモードコマンド ((system::args ((((2)))) (x (((2))))) ;;argsはcaaarに渡された引数のリスト [1]DEBUG>>:c Continue execution. ;;実行の継続 2 [2]->ブレークポイントは何個設定しても構いません。解除は