OCamlで例外からスタックトレースを取得する方法
OCamlでexn型の値からスタックトレースを取得する方法はありますでしょうか?JavaのgetStackTrace()のような。
標準のPrintexcモジュールを探したのですが、現在のスタックトレースを取得する Printexc.get_backtrace はあるものの、例外からこしらえる方法が分かりませんでした。
参考: http://caml.inria.fr/pub/docs/manual-ocaml/libref/Printexc.html
例えば次のようなプログラムで、work関数が失敗したときのスタックトレースを処理したいことなどがあります。
open Batteries
let work () = ...
let _ =
match wrap work () with
| Ok result -> print_endline result
| Bad e ->
(* ここでスタックトレースも出力したい *)
prerr_endline (Printexc.to_string e);
exit 1
コマンドラインのシステムなら単純にraiseで例外を投げてしまうのもアリかもしれませんが、ログファイルに保存したり、DBに保存したりしたいこともあると思うのです。