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

时间:2008-09-28 13:53:16

标签: ocaml stack-trace

如果您恰好要求它,Objective Caml语言只会产生堆栈跟踪 - 字节码和本机代码的要求是什么?

4 个答案:

答案 0 :(得分:36)

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

答案 1 :(得分:9)

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

答案 2 :(得分:3)

因为看起来你只能在unix上获得异常的跟踪,你可以在第二个进程中派生并抛出异常。这样主要过程可以继续:

export OCAMLRUNPARAM=b
# compile with -g

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

答案 3 :(得分:0)

如果您使用Ocamlbuild而不是直接调用编译器,则可以使用debug标记。来自manual

  

使用OCamlbuild,您只需将调试标记添加到程序的目标中,它将解决何时插入-g标志的问题。

例如,如果您要使用包foo.ml构建文件bar,那么您的_tags文件将有一行:

<foo.ml>: package(bar), debug

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