Module Exninfo
Additional information worn by exceptions.
type iexn= exn * infoInformation-wearing exceptions
val make : unit -> 'a tCreate a new piece of information.
val null : infoNo information
val info : exn -> infoRetrieve the information of the last exception raised.
val get_backtrace : info -> backtrace optionget_backtrace infodoes get the backtrace associated to info
val backtrace_to_string : backtrace -> stringbacktrace_to_string infodoes get the backtrace associated to info
val record_backtrace : bool -> unitval 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
bazshould re-raise usingiraisebelow.WARNING: any intermediate code between the
withand the handler may modify the backtrace. Yes, that includeswhenclauses. 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