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]} **
というようにエラーが表示される.
The comments to this entry are closed.
Comments