1
調試具有未處理異常的OCaml程序相當容易,因爲程序停止運行,您可以通過運行ocamldebug
或將OCAMLRUNPARAM
環境變量設置爲b
來獲得回溯。有沒有辦法獲得處理的異常的這種回溯?是否有可能破壞OCaml中的處理異常?
注意:修改程序以便它不處理異常當然是一種選擇。但是,如果可能的話,我想避免修改程序。類似於gdb
的catch
命令會很棒。
調試具有未處理異常的OCaml程序相當容易,因爲程序停止運行,您可以通過運行ocamldebug
或將OCAMLRUNPARAM
環境變量設置爲b
來獲得回溯。有沒有辦法獲得處理的異常的這種回溯?是否有可能破壞OCaml中的處理異常?
注意:修改程序以便它不處理異常當然是一種選擇。但是,如果可能的話,我想避免修改程序。類似於gdb
的catch
命令會很棒。
有一個函數Printexc.print_backtrace
將打印一個回溯,顯示從引發異常的點到正在處理異常的當前點的堆棧。這可能有所幫助,但請注意,它不打印完整的堆棧回溯。
我曾經使用Unix.fork
寫過一些hacky代碼,它在類Unix系統上打印完整的堆棧回溯。看到我的回答printing stack traces。 (我不會建議在生產中使用此代碼。)