[xyzzy:00638] Re: こんにちは木寅です
- Subject: [xyzzy:00638] Re: こんにちは木寅です
- From: Masahito Henmi <henmi@xxxxxxxxxxxxx>
- X-mailer: Denshin 8 Go V321.2b5
亀井さん、こんにちは。逸見 です。
> なんか私信が流れてきたような気もするけど・・・(^^;
ゴミを流してごめんなさい>ALL
> | eval-hook , apply-hook があれば、いいかも>亀井さん
> あったらデバッガ書いてくれる?(^^;
10年ぐらい前、作った自作のLISPにはつけていたのですが、
たしかステッパー&トレーサぐらいしか用途を思いつきませんでした。
ステッパー
eval
↓ < Hook 関数 >
eval-hook -----> (foo 1 2) この式実行する?
yes or no
<------
↓ 結果をどうやって表示してたんか覚えてない
トレーサ
apply
↓
apply-hook -----> (foo 1 2) トレース出力先にたれ流し
<------
↓
たしか環境を渡す方法が、CLtLに、よく書いてなくって、
結構悩んだ記憶があります。
今CLtLが手元にないので、わからんけど。
こういうのをデバッガーというのでしょうか?
みなさんの期待しているデバッガーになっているかという意味。
バイトコードを解析して int 3を挿入するのが正当なやり方??
わからーん。
デベロッパースタジオみたいにソースコードをクリックして
そこにブレークポイントを仕掛けるには、コンパイラが生成した
バイトコードの位置を知る必要がある。うむ、大変そう。
コンパイルしてない関数だったら、
(trace '関数名)
ってやって関数を書き換えて
(defun foo (x y z)
(format *trace* "fooがよばれたよん, 引数は ~s ~s ~s~%" x y z)
(let ((ans (original-foo x y z)))
(format *trace* "fooの戻り値は ~s~%" ans) ))
ってやる。これは時には便利なこともある。
WinMulは作ってたような気もする。xyzzyは引数リストが &optional
とか&rest とか一杯あるから、結構大変かも
まあ、スタックトレースがあれば、バグった位置はわかるけど。
あぁ、そこでread-eval-printループに入っちゃえば、
変数の値とかは調べられるよね。これは結構使えると思うのだが。
------------------------------------------------------------
逸見雅人 Email henmi@xxxxxxxxxxxxx
Masahito Henmi