Module Debuggers.Tracer

Produce a full execution trace. The order of the trace is independent of the order in which commands are executed in different threads, so it is suitable for expect tests.

include S
type t
type ('a, 'b) prim_token
val before_prim : t -> ('a'b) Shexp_process.Prim.t -> ('a'b) Shexp_process.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) Shexp_process.Prim.t -> ('b, exn * Stdlib.Printexc.raw_backtrace) Stdlib.result -> ('a'b) prim_token -> unit

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

val user_exn : t -> exn -> Stdlib.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.

val create : unit -> t
val result : t -> Shexp_sexp.Std.Sexp.t