« ErlangでComet設置方法 | Main | Erlang Tips »

Friday, June 08, 2007

Erlangで行番号付きでエラーを出力する方法

Erlangは,通常エラーが起きたときにスタックトレースを出してくれるのだけど,行番号の情報が含まれない.
少し長めの関数を書いていたりすると,関数の中のどこでエラーが出たのかなかなかわからないことがある.

そこで,エラーが発生した行番号を出せないかと調べていたら,FAQにしっかり書いてあった.
5.19. ...find out which line my Erlang program crashed at?

以下のようにインストールしておくと便利だと思う.

まず,smart_exceptionsからソースをダウンロード.
ディレクトリ構造はそのままダウンロードしてくる.
で,srcの中のファイルをコンパイルしてebinの中に入れておく.
(Makefile自体はjungerlのサポートファイルが必要なので手作業でコンパイルした方が早いと思う)
その後,smart_exceptions を /usr/local/lib/erlang/lib の下などに置けばOK.

置く場所は環境によって異なるけれども,

mikage@pepper:/usr/local/lib/erlang/lib> erl -noshell -eval 'io:format("~p~n", [code:lib_dir("inets")]),halt().'
"/usr/local/lib/erlang/lib/inets-4.7.11"

とかやって,表示されたディレクトリと同じような場所に置けばOK.

めんどくさい人は,コンパイル済みのを
http://pepper.sherry.jp/mikage/smart_exceptions.tar.gz
に置いておいたので,コレを持って行って解凍してください.


使い方は次の通り.

erlc +'{parse_transform, smart_exceptions}' test.erl

のようにオプションをつけてコンパイル.

あとは普通に実行すれば,

1> test:test().
** exited: {{test,test,0},{line,10},match,[5]} **

というようにエラーが表示される.

|

« ErlangでComet設置方法 | Main | Erlang Tips »

Comments

The comments to this entry are closed.

TrackBack


Listed below are links to weblogs that reference Erlangで行番号付きでエラーを出力する方法:

« ErlangでComet設置方法 | Main | Erlang Tips »