« 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

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack


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

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