2016-02-27 52 views
2

我在Emacs中開發OCaml程序,編譯並運行終端中的二進制文件。執行二進制文件時是否有可能回溯「failwith」錯誤?

可以在Emacs中追溯「failwith」錯誤,如this post。但是在大多數情況下,當我在終端中執行二進制文件時,會出現「failwith」錯誤。除了

my error message 
Fatal error: exception Failure("my error message") 

有沒有人知道是否有可能回溯?也就是說,瞭解哪個.ml文件涉及這樣的執行?

回答

1

如果您在調試支持下編譯,則可以使用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 

在這樣的小例子中,內聯將使報表稍微有用。在現實世界中,它可能更有用。

(但它仍然可能不是儘可能詳細,你想。)

+0

長期以來我沒有編寫OCaml的,我忘了...謝謝... – SoftTimur

+4

您也可以撥打[' Printexc.record_backtrace true'](http://caml.inria.fr/pub/docs/manual-ocaml/libref/Printexc.html#VALrecord_backtrace),而不是使用環境變量。無論哪種方式都需要'-g'。 – antron

相關問題