执行二进制文件时是否可以回溯 "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
在像这样的小示例中,内联器会使报告的用处降低一些。在现实世界的程序中,它可能更有用。
(但它可能仍然没有您想要的那么详细。)
我在 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
在像这样的小示例中,内联器会使报告的用处降低一些。在现实世界的程序中,它可能更有用。
(但它可能仍然没有您想要的那么详细。)