[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:00638] Re: こんにちは木寅です



亀井さん、こんにちは。逸見 です。

> なんか私信が流れてきたような気もするけど・・・(^^;

ゴミを流してごめんなさい>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

Index Home