Lwt.backtrace_* 函数

Lwt.backtrace_* functions

我刚刚注意到 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

不幸的是,它们没有记录。他们是做什么的?

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

相同的目的

此页面上记录了 -lwt-debug 选项:http://ocsigen.org/lwt/2.5.0/manual/(搜索 "backtrace support" 页面以转到它)。

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

看到这个commit,这表明在try_lwt生成的代码中使用了这些:https://github.com/ocsigen/lwt/commit/78eee34fb6247da38a3d4ea5b7872676181d47e2

已编辑:通过查看更多代码确认了更多内容,并合并了注释。