以下の内容はhttps://higepon.hatenablog.com/entry/20080327/1206606457より取得しました。


デバッグ難航 - Scheme VM を書く

コンパイラVM on Gauche で動かしている。
特定のコードをコンパイルしようとするとコードが想定しない動きをして落ちてしまう。


原因をひたすら調べている。

  • おかしくなる手続きを特定
  • 同じ引数で呼んでみる →落ちない
  • pass1 の展開結果を見る →正常
  • コンパイル結果を眺める →正常に見える


ちとお手上げ気味なので VM の状態が正常かどうかを 1 インストラクション毎にチェックすることにした。
以下は補助マクロ

(define-macro (debug-case val . clauses)
  `(case ,val
     ,@(map (lambda (x) `(,(car x)
                         (let1 debug-clause (quote ,(car x))
                           ,@(cdr x))))
            clauses)))

(define-macro (check-vm-paranoia pred)
  `(unless ,pred
     (error "** vm check paranoia " (quote ,pred) " on " debug-clause)))

debug-case マクロは case の代わり使うことで各 clause 内で debug-clause という変数が参照できるようになります。




以上の内容はhttps://higepon.hatenablog.com/entry/20080327/1206606457より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14