Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2011-01-15

McCLIMのインスペクタとデバッガ

| 15:19 | McCLIMのインスペクタとデバッガ - わだばLisperになる を含むブックマーク はてなブックマーク - McCLIMのインスペクタとデバッガ - わだばLisperになる

Climacsやclim-listenerで遊んでいるとちょくちょくデバッガに落ちてしまいます。

SLIMEから起動の場合は、SLIMEに落ちるのですが、SLIME経由で起動していない場合は、デフォルトのどこかに落ちてしまい厄介なのですが、McCLIMのディレクトリを眺めていたらデバッガがあるようなので試してみました。

このデバッガは同じくCLIMのインスペクタに依存していたりするのですが、asdファイルがないのでとりあえず手動でロードすることにしました。

(ignore-errors
  (progn
    (let ((*default-pathname-defaults*
           (merge-pathnames "dists/quicklisp/software/mcclim-20101006-cvs/Apps/Inspector/"
                            ql:*quicklisp-home*)))
      (load "package")
      (load "disassembly")
      (load "inspector"))

    (let ((*default-pathname-defaults*
           (merge-pathnames "dists/quicklisp/software/mcclim-20101006-cvs/Apps/Debugger/"
                            ql:*quicklisp-home*)))
      (load "clim-debugger")))
  #+sbcl (setf (symbol-global-value '*debugger-hook*)
               #'clim-debugger:debugger)
  )

使用例では、

(let ((*debugger-hook* #'clim-debugger:debugger))
  (clim-listener:run-listener :new-process t))

のようにLETで束縛すればOKと書いてありますが、どうも別スレッドにすると違うデバッガが登録されてしまったりするようです。

しょうがなく(setf (symbol-global-value '*debugger-hook*) #'clim-debugger:debugger)して場当たり的な対処(SBCLの場合)

単体の実行ファイルを作成してそこから起動したり、StumpWMから起動する場合は落ちる場所がまちまちになるので*debugger-hook*にclim-debuggerを登録してから起動すると便利かなと思います。