emacs lispでpritfデバッグ

trampが繋がらない問題を追跡していく中で少しだけ
emacs lispを触ったので、そのときのメモ書きを残します。

今回は自分で何かを作るわけでは無いし、環境構築となると大げさなので
C言語で言うところのprintfデバッグが出来るようになるというのを目標にしました。

覚えた事は以下の通り

  • *scratch*バッファでlispコードのテスト
  • printfにあたる関数
  • elファイルのコンパイル
  • その他

[*scratch*バッファでlispコードのテスト]

先ずは何でもいいからlispのコードを書いて実行したいと思って少し調べてみたところ、Emacsを起動したときに出てくる*scratch*バッファが使える事が解りました。
今まで全然知らなかったんですが、このバッファでlispコードを実行する事が出来ます。普通にコードを書いて、実行は実行するブロックの行末でC-jです。

(+ 1 2) ;ココでC-j
3

解らない構文があったらココに戻ってきてテストコードを書く、
という手順をずっと繰り返しました。

[printfにあたる関数]

これはmessageという関数を使います。
早速*scratch*バッファで試してみましょう。

(message “Hello Emacs Lisp”) ;ココでC-j
Hello Emacs Lisp

この関数を使って出力した文字列は*Messages*バッファに表示されます。
これでprintfデバッグまで後一歩です。

[elファイルのコンパイルとelcファイルのリロード]

elファイルにmessage関数を埋め込むだけでは、
編集後のelファイルをコンパイルして、モジュールをリロードする必要があります。
emacsから以下のコマンドで行います。M-x byte-compile-file
これにコンパイルしたいファイルを指定すればコンパイルされます。
コンパイルするとelcファイルが生成されますので、このファイルをM-x load-libraryでロードします。

以上でprintfデバッグが出来るようになりました。
後はひたすらmessage埋め込み=>コンパイル・リロード=>トレース対象の実行、*messages*の確認を繰り返せば大体の事は把握できると思います。

[その他]

その他に少し役に立ったと思う事を箇条書きで列挙しておきます。

[common lisp]

lispの文法とか、有用性等の一般的な情報はCommonLispの方が
多く存在しているような気がします。ですのでCommonLispをインストールしておいた方が便利です。CentOS上ではyum install clispでOKです。OSX上でport install clispは何故か失敗してしまいました。

[prin1-to-string]

文字列以外のオブジェクトの中身を出力させたい事がよくありますが、
それはこの関数を使えば行けます。僕は以下のような関数を定義してトレースしました。

(defun debugout (param1)
  (message (concat "@@ "
                   (prin1-to-string param1)
                   " @@")))

以上でprintfデバッグにはなったような気がしますが、1日触っただけですので、
間違ってたらごめんなさい。

***参考リンク

http://www.geocities.jp/m_hiroi/xyzzy_lisp.html
http://www.bookshelf.jp/texi/elisp-intro/jp/emacs-lisp-intro.html

Leave a Reply

Your email address will not be published. Required fields are marked *