2013-02-25 56 views
1

調試具有未處理異常的OCaml程序相當容易,因爲程序停止運行,您可以通過運行ocamldebug或將OCAMLRUNPARAM環境變量設置爲b來獲得回溯。有沒有辦法獲得處理的異常的這種回溯?是否有可能破壞OCaml中的處理異常?

注意:修改程序以便它不處理異常當然是一種選擇。但是,如果可能的話,我想避免修改程序。類似於gdbcatch命令會很棒。

回答

2

有一個函數Printexc.print_backtrace將打印一個回溯,顯示從引發異常的點到正在處理異常的當前點的堆棧。這可能有所幫助,但請注意,它不打印完整的堆棧回溯。

我曾經使用Unix.fork寫過一些hacky代碼,它在類Unix系統上打印完整的堆棧回溯。看到我的回答printing stack traces。 (我不會建議在生產中使用此代碼。)