如何在OCaml中获取堆栈跟踪?

如何在OCaml中获取堆栈跟踪?,ocaml,stack-trace,Ocaml,Stack Trace,目标Caml语言只有在您要求正确的情况下才会生成堆栈跟踪-字节码和本机代码的要求是什么?使用-g编译并设置环境变量OCAMLRUNPARAM=b一些函数允许您以编程方式执行此操作。因为看起来您只能在上获取异常跟踪您可以在第二个进程中分叉并抛出异常。这样,主流程可以继续: export OCAMLRUNPARAM=b # compile with -g flush_all(); let r = Unix.fork() in if r == 0 then raise Exit 如果使用Ocaml

目标Caml语言只有在您要求正确的情况下才会生成堆栈跟踪-字节码和本机代码的要求是什么?

使用-g编译并设置环境变量OCAMLRUNPARAM=b

一些函数允许您以编程方式执行此操作。

因为看起来您只能在上获取异常跟踪您可以在第二个进程中分叉并抛出异常。这样,主流程可以继续:

export OCAMLRUNPARAM=b
# compile with -g

flush_all(); let r = Unix.fork() in if r == 0 then raise Exit

如果使用Ocamlbuild而不是直接调用编译器,则可以使用
debug
标记。从:

使用OCamlbuild,您可以简单地将debug标记添加到程序的目标中,它将确定何时插入-g标志

例如,如果您正在使用package
bar
构建一个文件
foo.ml
,那么您的
\u标签
文件将有一行:

<foo.ml>: package(bar), debug
:包(条),调试

这将在构建字节码/本机文件时插入相应的
-g
标志。但是,您仍然需要使用其他答案中提到的
export OCAMLRUNPARAM=b
设置环境变量。

对于本机代码,我相信这只适用于OCaml v3.10或更高版本。具体来说,
Printexc.record\u backtrace true