如果您恰好要求它,Objective Caml语言只会产生堆栈跟踪 - 字节码和本机代码的要求是什么?
答案 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
设置环境变量,如其他答案中所述。