package shexp

  1. Overview
  2. Docs

shexp_process allows one to plug a debugger in the evaluator. Logged and Traced are essentially two non-interactive debuggers.

type t
type ('a, 'b) prim_token
val before_prim : t -> ('a, 'b) Prim.t -> ('a, 'b) Prim.Args.t -> ('a, 'b) prim_token

Called before the execution of a primitive. The S-expression is a representation of the primitive call, for instance (mkdir "foo").

val after_prim : t -> ('a, 'b) Prim.t -> ('b, exn * Printexc.raw_backtrace) result -> ('a, 'b) prim_token -> unit

Called after the execution of a primitive, with the result.

val user_exn : t -> exn -> Printexc.raw_backtrace -> unit

Register a user exception, i.e. when a bind raises.

val output : t -> string -> unit

Captured output

val fork : t -> t * t

Called before forking.

val end_fork : t -> t -> t -> unit

Called in the same thread that started the fork.

val enter_sub : t -> unit

Shexp tries to linearize the trace as much as possible. When an execution parameter is changed locally, such as in (chdir ...) >>= ..., a sub context is entered.

val leave_sub : t -> unit
val force_threads : bool

Force the use of threads in all forks, even when Shexp_process detect they are not necessary.