Clewn

はじめて Clewn を使ってみた。
http://clewn.sourceforge.net/index.html
Clewn は vimgdb を統合させるプログラムだが、その実現手段は2通りある。
1つは単体のプログラム clewn を使う方法。
もう1つは vimGdb として vim に対するパッチをあてる方法。
両者はソースを共有し、ほとんど同じ機能を提供するが、vimGdb は

  • gdb の式を評価した値をポップアップ表示できない
  • デバッギの出力を gdb の tty コマンドで他の端末に渡さねばならない
  • デバッグ情報として埋め込まれたソースコードのパスを vim に知らせることができない

などの制限をもつ。
Clewn の pty.c は screen からもってきたらしい。GPL なのはそのためだろうか。
でもこれ、vim の pty.c とも同じなんだよなあ。
と思ったら vim の pty.c にはこう書いてあった。

* The stuff in this file mostly comes from the "screen" program.
* Included with permission from Juergen Weigert.

さて clewn-1.9.tar.gz を展開して ./configure && make。
make が失敗するので、

diff clewn.orig/obstack.c clewn/obstack.c
115,116c115,117
< #  include "exitfail.h"
< #  define obstack_exit_failure exit_failure
---
> //#  include "exitfail.h"
> int obstack_exit_failure = EXIT_FAILURE;
> //#  define obstack_exit_failure exit_failure
411c412,413
< #  include "gettext.h"
---
> //#  include "gettext.h"
> #  include <libintl.h>

と変更して、Makefile に -lintl を追加。
これでコンパイルは通ったが、make install しようとするとターゲット install がないという。
しかたないので clewn を手動コピーして、runtime を ~/.vim にコピー。
コマンドラインから

$ clewn

すると "guessing level, please wait..." と出て2分くらい待たされる。
これは何度やってみてもそれくらいかかる。改善手段はあるのだろうか。
level が分かると clewn は 2回 fork してそれぞれ gvimgdb になる。

(gdb) file vim
Reading symbols from vim...done.(gdb) run -f -g

とすると gvimデバッグを始められる。
スクリーンショット
http://www.k3.dion.ne.jp/~jod/screenshot003.png
画面左上の clewn-gvim の中で C-b するとブレークポイント
設定できたり、変数名の上にマウスポインタを持っていくとその値がポップアップされたり、ちゃんと連係できているようだ。
gdb 側でデバッギを停止すると clewn-gvim でもそこのソースコードにジャンプしてくれるのだが、いくらかラグがある。


gdb で disp hoge としておくと clewn-gvim の .clewn-watched-vars.gdbvar というバッファで毎回 hoge の値を表示してくれる。しかも前回と値が変わっているときは文字色を変えてくれるし、なかなかいい。


Clewn、gdb 間は gdb の annotation で通信し、Clewn、gvim 間はソケットで通信。
vim にはすでに NetBeans インターフェイスが組み込まれているので、Clewn から gvimNetBeans コマンドを送って操作しているような感じ。


clewn の名前の由来は「Command Line Editor Worker on NetBeans」。
http://article.gmane.org/gmane.editors.vim.devel/6731