执行二进制文件时是否可以回溯 "failwith" 错误?

Is it possible to backtrace "failwith" error when executing a binary?

我在 Emacs 中开发 OCaml 程序,在终端中编译并 运行 二进制文件。

可以像 this post 一样在 Emacs 中回溯 "failwith" 错误。但大多数时候,当我在终端中执行二进制文件时,会出现 "failwith" 错误。除了

之外,几乎没有其他信息
my error message
Fatal error: exception Failure("my error message")

有人知道是否可以回溯吗?即,了解此类执行涉及哪些 .ml 文件?

如果您编译时支持调试,您可以使用 OCAMLRUNPARAM=b 请求回溯。

$ cat bt.ml
let g x = failwith "error"

let f x = g x

let main () = f 14

let () = main ()
$ ocamlopt -g -o bt bt.ml
$ OCAMLRUNPARAM=b bt
Fatal error: exception Failure("error")
Raised at file "pervasives.ml", line 30, characters 22-33
Called from file "bt.ml", line 7, characters 9-16

在像这样的小示例中,内联器会使报告的用处降低一些。在现实世界的程序中,它可能更有用。

(但它可能仍然没有您想要的那么详细。)