Lwt.backtrace_ *函数

时间:2015-08-06 15:34:57

标签: ocaml ocaml-lwt

我刚刚注意到Lwt.mli中的以下功能:

val backtrace_bind : (exn -> exn) -> 'a t -> ('a -> 'b t) -> 'b t
val backtrace_catch : (exn -> exn) -> (unit -> 'a t) -> (exn -> 'a t) -> 'a t
val backtrace_try_bind : (exn -> exn) -> (unit -> 'a t) -> ('a -> 'b t) -> (exn -> 'b t) -> 'b t
val backtrace_finalize : (exn -> exn) -> (unit -> 'a t) -> (unit -> unit t) -> 'a t

不幸的是,他们没有证件。他们做了什么?

1 个答案:

答案 0 :(得分:2)

GitHub和文档中的一些挖掘表明,当使用pa_lwt并将-lwt-debug传递给camlp4时,这些内部用于在线程之间传播回溯。默认情况下,它们也用于ppx_lwt

此页面上记录了-lwt-debug选项:http://ocsigen.org/lwt/2.5.0/manual/(在页面中搜索"回溯支持"转到它)。

此处记录了ppx_lwt中关闭 的选项:https://ocsigen.org/lwt/dev/api/Ppx_lwt(搜索-no-debug)。

请参阅此提交,其中显示这些提交在try_lwt等生成的代码中使用:https://github.com/ocsigen/lwt/commit/78eee34fb6247da38a3d4ea5b7872676181d47e2

已编辑:通过查看更多代码并纳入评论确认更多内容。