当-g应该用于在OCaml中打印堆栈跟踪?

时间:2012-02-23 17:42:16

标签: debugging exception compilation functional-programming ocaml

我正在尝试使用Printexc.get_backtrace获取堆栈跟踪,但我收到错误:

(Program not linked with -g, cannot print stack backtrace)

我正在编译:

ocamlfind ocamlc -g -o foo ... $(FOO_OBJS)

FOO_OBJS编译为: ocamlc -c $OBJ

怎么了?是否应该使用.cmo编译每个-g

如果在没有-g的情况下编译的对象发生异常,我会得到部分堆栈跟踪,还是根本没有堆栈跟踪?

1 个答案:

答案 0 :(得分:9)

  

怎么了?是否应该使用-g?

编译每个.cmo

是的,您必须在编译和链接中添加-g选项。您也可以使用ocamldebug在此选项上单步执行该程序。此外,环境变量OCAMLRUNPARAM必须设置为b

  

如果在没有-g编译的对象中发生异常,我会得到一个   部分堆栈跟踪,还是根本没有堆栈跟踪?

你打赌!我记得有几次我忘记了-g选项,后面的跟踪只是标准库。