调试具有未处理异常的OCaml程序非常简单,因为程序停止运行,您可以通过在ocamldebug
中运行或将OCAMLRUNPARAM
环境变量设置为{{1}来获取回溯}。有没有办法为处理异常获得这样的回溯?
注意:修改程序以使其不处理异常当然是一种选择。但是,如果可能的话,我想避免修改程序。类似于b
的{{1}}命令的东西会很棒。
答案 0 :(得分:2)
有一个函数Printexc.print_backtrace
将打印一个回溯,显示从异常被提升到处理异常的当前点的堆栈。这可能有所帮助,但请注意它不会打印完整的堆栈回溯。
我曾经使用Unix.fork
编写了一些hacky代码,它在类Unix系统上打印完整的堆栈回溯。请参阅我对printing stack traces的回答。 (我不建议在生产中使用此代码。)