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

pbp*_*pbp 8 debugging ocaml functional-programming compilation exception

我正在尝试使用堆栈跟踪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我会得到部分堆栈跟踪,或者根本没有堆栈跟踪?

nlu*_*oni 9

怎么了?每个.cmo应该用-g编译吗?

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

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

你打赌!我记得有几次我忘了这个-g选项而且后面跟踪只是标准库.

  • 顺便说一句,所有库(cma和cmxa)都应该用-g编译,否则穷人会得到不完整的堆栈回溯. (4认同)