ExninfoAdditional information worn by exceptions.
type iexn = exn * infoInformation-wearing exceptions
val make : string -> 'a tCreate a new piece of information.
val null : infoNo information
val info : exn -> infoRetrieve the information of the last exception raised.
get_backtrace info does get the backtrace associated to info
val backtrace_to_string : backtrace -> stringbacktrace_to_string info does get the backtrace associated to info
val capture : exn -> iexnAdd the current backtrace information and other meta-data to the given exception.
The intended use case is to re-raise an exception while preserving the meta-data:
try foo
with
| Bar -> bar
| My_exn _ as exn ->
let (exn, info) = Exninfo.capture err in
...
let info = ... in
Exninfo.iraise (exn, info)
| exn when CErrors.noncritical exn ->
let iexn = Exninfo.capture err in
...
Exninfo.iraise iexnwhere baz should re-raise using iraise below.
WARNING: any intermediate code between the with and the handler may modify the backtrace. Yes, that includes when clauses. Ideally, what you should do is something like:
try foo
with exn when CErrors.noncritical exn ->
let (err, info) = Exninfo.capture exn in
match err with
| exception Bar -> ...
| err -> ...I admit that's a bit heavy, but there is not much to do...
val iraise : iexn -> 'aRaise the given enriched exception.
val reify : unit -> info